From 13469717bf1df034ec69828a57917334163e7246 Mon Sep 17 00:00:00 2001 From: unknown <1229394978@qq.com> Date: Sun, 14 May 2023 22:05:59 +0800 Subject: [PATCH] Init --- app/build.gradle | 4 +- .../com/example/register/TimeService.java | 17 ++-- .../register/activity/loginActivity.java | 41 ++++++++- .../register/adapter/ProductAdapter.java | 25 +++--- .../com/example/register/entity/User.java | 6 ++ .../register/fragment/IndexFragment.java | 35 +++++++- .../register/fragment/ProductFragment.java | 81 ++++++++++++++++++ .../fragment/ShoppingCartFragment.java | 44 +++++++++- .../netrequest/OkHttpClientProduct.java | 4 +- .../register/netrequest/OkHttpMessage.java | 2 +- .../register/netrequest/OkHttpUser.java | 9 +- app/src/main/res/drawable/all.png | Bin 0 -> 1045 bytes app/src/main/res/drawable/cart.png | Bin 0 -> 5573 bytes app/src/main/res/drawable/city.png | Bin 0 -> 790 bytes app/src/main/res/drawable/price.png | Bin 0 -> 1047 bytes app/src/main/res/drawable/salenum.png | Bin 0 -> 1294 bytes app/src/main/res/drawable/setting.png | Bin 0 -> 1101 bytes app/src/main/res/drawable/time.png | Bin 0 -> 2219 bytes app/src/main/res/drawable/user_account.png | Bin 0 -> 1045 bytes app/src/main/res/drawable/user_general.png | Bin 0 -> 402 bytes app/src/main/res/drawable/user_icon.png | Bin 0 -> 5995 bytes app/src/main/res/drawable/user_pay.png | Bin 0 -> 554 bytes app/src/main/res/drawable/user_sex.png | Bin 0 -> 1123 bytes app/src/main/res/layout/content_product.xml | 26 ++++-- 24 files changed, 254 insertions(+), 40 deletions(-) create mode 100644 app/src/main/res/drawable/all.png create mode 100644 app/src/main/res/drawable/cart.png create mode 100644 app/src/main/res/drawable/city.png create mode 100644 app/src/main/res/drawable/price.png create mode 100644 app/src/main/res/drawable/salenum.png create mode 100644 app/src/main/res/drawable/setting.png create mode 100644 app/src/main/res/drawable/time.png create mode 100644 app/src/main/res/drawable/user_account.png create mode 100644 app/src/main/res/drawable/user_general.png create mode 100644 app/src/main/res/drawable/user_icon.png create mode 100644 app/src/main/res/drawable/user_pay.png create mode 100644 app/src/main/res/drawable/user_sex.png diff --git a/app/build.gradle b/app/build.gradle index dc6b522..73c79ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,9 +36,9 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - + implementation 'com.alibaba:fastjson:1.2.0' implementation 'liji.library.dev:citypickerview:1.1.0' - + implementation 'com.squareup.okhttp3:okhttp:4.2.2' implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' } \ No newline at end of file diff --git a/app/src/main/java/com/example/register/TimeService.java b/app/src/main/java/com/example/register/TimeService.java index 619c5fd..22124bd 100644 --- a/app/src/main/java/com/example/register/TimeService.java +++ b/app/src/main/java/com/example/register/TimeService.java @@ -76,12 +76,15 @@ public class TimeService extends Service { * 报错内容:Failed to post notification on channel “null” */ OkHttpMessage okHttpMessage = new OkHttpMessage(); - OrangeMessage orangeMessage; + OrangeMessage Message; try { - orangeMessage = okHttpMessage.consumeMessage(); - if (!Objects.isNull(orangeMessage)) { - Log.i("orangeMessage", "run: " + orangeMessage.toString()); - NotificationChannel channel = new NotificationChannel("channel", "通知", NotificationManager.IMPORTANCE_DEFAULT); + Message = okHttpMessage.consumeMessage(); + if (!Objects.isNull(Message)) { + Log.i("orangeMessage", "run: " + Message.toString()); + NotificationChannel channel = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + channel = new NotificationChannel("channel", "通知", NotificationManager.IMPORTANCE_DEFAULT); + } manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { manager.createNotificationChannel(channel); @@ -89,10 +92,10 @@ public class TimeService extends Service { builder = new NotificationCompat.Builder(TimeService.this); Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - builder.setContentTitle("来自橙一色的系统通知消息" + " " + formatter.format(date)); + builder.setContentTitle("来自美团的系统通知消息" + " " + formatter.format(date)); builder.setSmallIcon(R.drawable.chengzi); builder.setChannelId("channel"); - builder.setContentText(orangeMessage.getContent()); + builder.setContentText(Message.getContent()); builder.setAutoCancel(true); builder.setDefaults(Notification.DEFAULT_ALL); Notification notification = builder.build(); diff --git a/app/src/main/java/com/example/register/activity/loginActivity.java b/app/src/main/java/com/example/register/activity/loginActivity.java index 5d91c93..6436314 100644 --- a/app/src/main/java/com/example/register/activity/loginActivity.java +++ b/app/src/main/java/com/example/register/activity/loginActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; +import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -13,6 +14,10 @@ import androidx.appcompat.app.AppCompatActivity; import com.example.register.R; import com.example.register.dateoperation.Database; +import com.example.register.entity.User; +import com.example.register.netrequest.OkHttpUser; + +import java.io.IOException; public class loginActivity extends AppCompatActivity implements View.OnClickListener { @@ -78,7 +83,41 @@ public class loginActivity extends AppCompatActivity implements View.OnClickList } return false; } - + /** + * 登录验证 + */ + Runnable runnable = new Runnable() { + @Override + public void run() { + String username = usernameT.getText().toString(); + String password = passwordT.getText().toString(); + User orangeUser = new User(); + orangeUser.setUsername(username); + orangeUser.setPassword(password); + OkHttpUser okHttpUser = new OkHttpUser(); + User orangeUser1 = null; + try { + orangeUser1 = okHttpUser.userLogin(orangeUser); + if (orangeUser1 != null) { + Intent intent1 = new Intent(loginActivity.this, IndexActivity.class); + Bundle bundle = new Bundle(); + bundle.putString("username", usernameT.getText().toString()); + bundle.putString("password", orangeUser1.getPassword()); + bundle.putString("city", orangeUser1.getCity()); + bundle.putString("sex", orangeUser1.getSex()); + intent1.putExtras(bundle); + startActivity(intent1); + } else { + //解决在子线程中调用Toast的异常情况处理 + Looper.prepare(); + Toast.makeText(loginActivity.this, "账号或者密码错误", Toast.LENGTH_SHORT).show(); + Looper.loop(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }; } \ No newline at end of file diff --git a/app/src/main/java/com/example/register/adapter/ProductAdapter.java b/app/src/main/java/com/example/register/adapter/ProductAdapter.java index f52705e..04371b5 100644 --- a/app/src/main/java/com/example/register/adapter/ProductAdapter.java +++ b/app/src/main/java/com/example/register/adapter/ProductAdapter.java @@ -1,7 +1,6 @@ package com.example.register.adapter; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,28 +8,29 @@ import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; -import com.example.register.entity.Product; import com.example.register.R; +import com.example.register.entity.OrangeProductPack; import java.util.List; public class ProductAdapter extends BaseAdapter { - private List productList; + //private List productList; + private List orangeProductList; private LayoutInflater layoutInflater; - public ProductAdapter(Context context, List productList) { - this.productList = productList; + public ProductAdapter(Context context, List orangeProductList) { + this.orangeProductList = orangeProductList; this.layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { - return productList.size(); + return orangeProductList.size(); } @Override public Object getItem(int position) { - return productList.get(position); + return orangeProductList.get(position); } @Override @@ -42,7 +42,6 @@ public class ProductAdapter extends BaseAdapter { public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { - Log.i("aa", "getView: "+"aa"); convertView = layoutInflater.inflate(R.layout.categoty_detail_content, null); viewHolder = new ViewHolder(); viewHolder.productImage = convertView.findViewById(R.id.category_product_image); @@ -52,12 +51,11 @@ public class ProductAdapter extends BaseAdapter { } else { viewHolder = (ViewHolder) convertView.getTag(); } - Product product = productList.get(position); - Log.i("product", "getView: "+product.toString()); + OrangeProductPack product = orangeProductList.get(position); if (product != null) { - viewHolder.productImage.setBackgroundResource(product.getImageUrlId()); - viewHolder.productName.setText(product.getProductName()); - viewHolder.productPrice.setText(String.valueOf(product.getProductPrice())); + viewHolder.productImage.setImageBitmap(product.getImgBitmap()); + viewHolder.productName.setText(product.getName()); + viewHolder.productPrice.setText(String.format("%s元", String.valueOf(product.getPrice()))); } return convertView; } @@ -66,4 +64,5 @@ public class ProductAdapter extends BaseAdapter { ImageView productImage; TextView productName, productPrice; } + } diff --git a/app/src/main/java/com/example/register/entity/User.java b/app/src/main/java/com/example/register/entity/User.java index e5d718e..5cf5617 100644 --- a/app/src/main/java/com/example/register/entity/User.java +++ b/app/src/main/java/com/example/register/entity/User.java @@ -28,6 +28,9 @@ public class User { return password; } + public void setUsername(String username) { + this.username = username; + } public void setPassword(String password) { this.password = password; } @@ -47,6 +50,9 @@ public class User { public void setAddress(String address) { this.address = address; } + public String getCity() { + return address; + } @Override public String toString() { diff --git a/app/src/main/java/com/example/register/fragment/IndexFragment.java b/app/src/main/java/com/example/register/fragment/IndexFragment.java index 2f5bf39..b995fb8 100644 --- a/app/src/main/java/com/example/register/fragment/IndexFragment.java +++ b/app/src/main/java/com/example/register/fragment/IndexFragment.java @@ -1,6 +1,7 @@ package com.example.register.fragment; import android.app.Fragment; +import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -13,9 +14,12 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.example.register.adapter.ProductAdapter; +import com.example.register.entity.OrangeProductPack; import com.example.register.entity.Product; import com.example.register.R; +import com.example.register.netrequest.OkHttpClientProduct; +import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -26,7 +30,7 @@ public class IndexFragment extends Fragment implements View.OnClickListener { private GridView gridView; private List productList; private ProductAdapter productAdapter; - + private List list = new ArrayList<>(); @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -59,8 +63,9 @@ public class IndexFragment extends Fragment implements View.OnClickListener { ktvLine.setOnClickListener(this); gridView = view.findViewById(R.id.index_famous_gridview); initData(); - productAdapter = new ProductAdapter(getActivity(), productList); - gridView.setAdapter(productAdapter); + //productAdapter = new ProductAdapter(getActivity(), productList); + //gridView.setAdapter(productAdapter); + new SearchProductTask().execute(); } @@ -106,4 +111,28 @@ public class IndexFragment extends Fragment implements View.OnClickListener { productList.add(product5); } + + /** + * 发送网络请求获取数据 + */ + class SearchProductTask extends AsyncTask> { + + @Override + protected List doInBackground(Void... voids) { + OkHttpClientProduct clientProduct = new OkHttpClientProduct(); + try { + list = clientProduct.getProductPack(); + } catch (IOException e) { + e.printStackTrace(); + } + return list; + } + + @Override + protected void onPostExecute(List orangeProducts) { + productAdapter = new ProductAdapter(getActivity(), list); + gridView.setAdapter(productAdapter); + } + } } + diff --git a/app/src/main/java/com/example/register/fragment/ProductFragment.java b/app/src/main/java/com/example/register/fragment/ProductFragment.java index 04d41a8..7c7b2e0 100644 --- a/app/src/main/java/com/example/register/fragment/ProductFragment.java +++ b/app/src/main/java/com/example/register/fragment/ProductFragment.java @@ -1,21 +1,102 @@ package com.example.register.fragment; import android.app.Fragment; +import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.GridView; +import android.widget.Spinner; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.example.register.R; +import com.example.register.adapter.ListViewAdapter; +import com.example.register.adapter.ProductAdapter; +import com.example.register.entity.Condition; +import com.example.register.entity.OrangeProductPack; +import com.example.register.netrequest.OkHttpClientProduct; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; public class ProductFragment extends Fragment { + private Spinner conditonListSpinner; + private ListViewAdapter listViewAdapter; + private List conditionList; + private GridView productGridView; + private List orangeProductList = new ArrayList<>(); + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_product, container, false); + init(view); return view; } + + /** + * 组件初始化方法 + * + * @param view + */ + private void init(View view) { + conditonListSpinner = view.findViewById(R.id.product_select_condition); + initCondList(); + listViewAdapter = new ListViewAdapter(getActivity(), conditionList); + conditonListSpinner.setAdapter(listViewAdapter); + productGridView = view.findViewById(R.id.product_list); + new SearchProductTask().execute(); + } + + /** + * 初始化conditionList + */ + private void initCondList() { + conditionList = new ArrayList<>(); + Condition allCondition = new Condition(); + allCondition.setConditionIcon(R.drawable.all); + allCondition.setConditionName("全部"); + Condition saleCondition = new Condition(); + saleCondition.setConditionIcon(R.drawable.salenum); + saleCondition.setConditionName("按销量高低排序"); + Condition timeCondition = new Condition(); + timeCondition.setConditionIcon(R.drawable.time); + timeCondition.setConditionName("按上市时间排序"); + Condition priceCondition = new Condition(); + priceCondition.setConditionIcon(R.drawable.price); + priceCondition.setConditionName("按商品价格排序"); + conditionList.add(allCondition); + conditionList.add(saleCondition); + conditionList.add(timeCondition); + conditionList.add(priceCondition); + } + + /** + * 发送网络请求获取数据 + */ + class SearchProductTask extends AsyncTask> { + + @Override + protected List doInBackground(Void... voids) { + OkHttpClientProduct clientProduct = new OkHttpClientProduct(); + try { + orangeProductList = clientProduct.getProductPack(); + } catch (IOException e) { + e.printStackTrace(); + } + return orangeProductList; + } + + @Override + protected void onPostExecute(List orangeProducts) { + ProductAdapter productAdapter = new ProductAdapter(getActivity(), orangeProductList); + productGridView.setAdapter(productAdapter); + } + } + + } diff --git a/app/src/main/java/com/example/register/fragment/ShoppingCartFragment.java b/app/src/main/java/com/example/register/fragment/ShoppingCartFragment.java index 6229019..f9f1369 100644 --- a/app/src/main/java/com/example/register/fragment/ShoppingCartFragment.java +++ b/app/src/main/java/com/example/register/fragment/ShoppingCartFragment.java @@ -1,21 +1,61 @@ package com.example.register.fragment; import android.app.Fragment; +import android.app.FragmentTransaction; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.example.register.R; +import com.example.register.entity.ShoppingCart; + +import java.util.ArrayList; +import java.util.List; + +public class ShoppingCartFragment extends Fragment implements View.OnClickListener { + private Button walkButton; + private List cartList = new ArrayList<>(); + private ProductFragment productFragment; -public class ShoppingCartFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = LayoutInflater.from(getActivity()).inflate(R.layout.content_shopping, container, false); + View view; + if (cartList.size() > 0) { + //有商品 + view = LayoutInflater.from(getActivity()).inflate(R.layout.cart_have_product, container, false); + } else { + view = LayoutInflater.from(getActivity()).inflate(R.layout.cart_no_product, container, false); + } + init(view); return view; } + + /** + * 组件初始化 + */ + private void init(View view) { + walkButton = view.findViewById(R.id.random_search); + walkButton.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.random_search: + //开启事务,fragment的控制是由事务来实现的 + FragmentTransaction transaction = getFragmentManager().beginTransaction(); + if (productFragment == null) { + productFragment = new ProductFragment(); + } + transaction.replace(R.id.main_content, productFragment); + transaction.commit(); + break; + } + } } diff --git a/app/src/main/java/com/example/register/netrequest/OkHttpClientProduct.java b/app/src/main/java/com/example/register/netrequest/OkHttpClientProduct.java index 3429d08..8c99d16 100644 --- a/app/src/main/java/com/example/register/netrequest/OkHttpClientProduct.java +++ b/app/src/main/java/com/example/register/netrequest/OkHttpClientProduct.java @@ -6,8 +6,8 @@ import android.graphics.BitmapFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; -import com.example.orangesale_end.entity.OrangeProduct; -import com.example.orangesale_end.entity.OrangeProductPack; +import com.example.register.entity.OrangeProduct; +import com.example.register.entity.OrangeProductPack; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/com/example/register/netrequest/OkHttpMessage.java b/app/src/main/java/com/example/register/netrequest/OkHttpMessage.java index b21f0d8..7933b34 100644 --- a/app/src/main/java/com/example/register/netrequest/OkHttpMessage.java +++ b/app/src/main/java/com/example/register/netrequest/OkHttpMessage.java @@ -2,7 +2,7 @@ package com.example.register.netrequest; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.example.orangesale_end.entity.OrangeMessage; +import com.example.register.entity.OrangeMessage; import java.io.IOException; import java.util.Objects; diff --git a/app/src/main/java/com/example/register/netrequest/OkHttpUser.java b/app/src/main/java/com/example/register/netrequest/OkHttpUser.java index d48ed32..bde821d 100644 --- a/app/src/main/java/com/example/register/netrequest/OkHttpUser.java +++ b/app/src/main/java/com/example/register/netrequest/OkHttpUser.java @@ -4,7 +4,7 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.example.orangesale_end.entity.OrangeUser; +import com.example.register.entity.User; import java.io.IOException; @@ -15,12 +15,13 @@ import okhttp3.RequestBody; import okhttp3.Response; public class OkHttpUser { + /** * 用户登录验证 * * @param orangeUser */ - public OrangeUser userLogin(OrangeUser orangeUser) throws IOException { + public User userLogin(User orangeUser) throws IOException { OkHttpClient okHttpClient= new OkHttpClient(); //数据类型为json格式 MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); @@ -39,7 +40,7 @@ public class OkHttpUser { System.out.println("responseStr = " + responseStr); JSONObject jsonObject = JSON.parseObject(responseStr); JSONObject jsonObject1 = jsonObject.getJSONObject("data"); - OrangeUser orangeUser1 = JSON.toJavaObject(jsonObject1, OrangeUser.class); + User orangeUser1 = JSON.toJavaObject(jsonObject1, User.class); return orangeUser1; } @@ -50,7 +51,7 @@ public class OkHttpUser { * @return * @throws IOException */ - public boolean userRegister(OrangeUser orangeUser) throws IOException { + public boolean userRegister(User orangeUser) throws IOException { OkHttpClient okHttpClient = new OkHttpClient(); //数据类型为json格式 MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); diff --git a/app/src/main/res/drawable/all.png b/app/src/main/res/drawable/all.png new file mode 100644 index 0000000000000000000000000000000000000000..131c4fd5cbf997a1519dd40440bdd380a0971649 GIT binary patch literal 1045 zcmV+w1nT>VP)q?Rk(M)1uBc%`;<|FSx5J@HrrFBuT(1l9e zh(ZvONukA9qgdxFE!DQ#DilhW?LsLSsiHO;Gn1Cd%sb`Im~me6X5QCe@*s=MyZ785 z=YBuJCVyy?``{V46p3^SMQLQ_Mm&n9$6vem2#6OUuz(f)7WJj>cu9gQ;F6{d3g!*~ zhXCv-0|eu-L-&jx#sUcEQPAh8FZHcctRrAH66qx&-eRE3v>`KKWkI6r(De_gH~FPq zs4ZZ2WTYAS{7C>>&A?W`|0>Uca^n=Z@P`%D5||wx?gP=M0G_rA2Kzu6>Mj@|>P=j# z6}KjENmWk>;9X1DY5`}!QZ2#&1rpy>YojVKt7-edeA6~g7IXtFBB_f4@yljynF2Wy zX2s63c43@h3ECmvSmO#0bK!}v1%y}7u zl?@5JPTh%fhLve8WLZ_etGdovsl8;d6#GZ&NxWDUm{HXs0?t@Ds=oIQ1O#Py5lheFr#V5i1~f@ zy7E@1dx`-dCzRt`y3f6507ldNHh>9F!Kr{u%V(ZK$jV#v!aI|Dhd(d?$5I?2!i=Zr zbpjHxHr*CBcJXMM2L$l-W&i^Ga?BSlUJuH%cr?MCLV>qsrcN0|ex)V0U;Etvl>bE2 z{FmVpi8|K*q0J$RC*5ul{WdC<~2V;N7Bt+qPik z5$$fPBPboyzM=9d+OmsR3ydZB1yXR`Hqu1~nYe$ZEu5^@hUKS^H&fiyK*f8?OO{Xv zKn4~7gl2r9?`y@i1j@>h%e-~leS8E!o*An@c7cS?S9FY@_J`!oRXe0rfy(#MBtHjH zM4Cgbfj<#wV%irp+&G+Db;~v@ZhGKDEs|t7g22|C P00000NkvXXu0mjfWqIjS literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/cart.png b/app/src/main/res/drawable/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e1190318bac5a414c75ec24d955fae176d1a7c GIT binary patch literal 5573 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 J#XX0o{{y$Isht1- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/city.png b/app/src/main/res/drawable/city.png new file mode 100644 index 0000000000000000000000000000000000000000..790fb2bf39c33588894e33135a78fc1c05ed6caf GIT binary patch literal 790 zcmV+x1L^#UP)&Rd)Azkx1s<6Vd&j0As9)Z*~+qJ9V@fa4!+P{tX}Cn;o^A z0#97z2mE6~ArY9|$W0q=J1aL74vbT;Z%FVmj;V60)XN)l{^KlBNLW;uIF({2YuBE2 zcC5=9TWbna9I^Z8o0G7cl2!yYdy`1SwG$;-psw+IfN$Dm9 zVUm|{P*tj+F;%2fy_G)hks&M$df^`vz-0I;1liSc%kvI4VJ~OqYP#V z=xUQ0uykCXRpEq1z_Xz*4_N4$N-_aXeyzF7%b2FW-7@f*(3eLowb#iq0S1x&0^IEq zP=!;|c^P)G$#jzhk(wvTHrGI_`o++f?Jl-X84M!*8@R(IKojj!=*xhu4{N|6(%*s2 zwvJPDODnf<-^_FJXPQ4Nz*3}h+VK=~1Ii-8?l3Puw}VUtEJb=$;gz&2&A5Lu^kr9O zz*1FTROPdb!R^eHcf%2RyOp?Q2KUYBz{Va<11%3(b9A7b7ueq{fWk3>hkys$(h9r6 zyqs*NX$cra8UW>Xj@O=TL8RXUI~w|!sjwgiCywj$B7BjO&JRLgCS3umzzb=0QW&51 zWya`&NdExtRG~PXm&$=Jb*NUuye70AZUufQ`|_|W;6Ffr8ep=o912GynU*K2T5y4@ z`(LTCWu_>^hQI*m^iGKXn&y^+sryX4`6PsIldvu9rAwDu%|FgTn<$ejBJdwAaHUC?BTvie6!0 z`XyQFZU)zR>!idNYiy_#rDg@VdSv|A?vPF#*=2A$%6lmp{5JIEN!MfM4dDH@jx7L< zed>u2^JZ9(rmoR_~c116cgIRh(k%y9i^>IiW4t~O0J}$laX>kVYWW~*!XY)tUC;7*u7Dn7;bH_Hee=%e>9oTgN@&K~fcpjoMvnK>nz;g56CONr_SwstF=g1GNDWM8ING zO9Gl!zPl};5Cb6)n;m{wKO!N97!pI9)I@_83u?6N++$|iF1zi{+&i?I-efaB_I=NJ z=FZ$R_a4F+A2d?FD^C{{lOb{e&Lu{!9ghh;0QImXd#-Cc)jpCOz5%&>_Dz=6R{}y1 zj1mCZ3V>b^4ufGDM#f>$R;&jV6al>#VO2h< zYjbo2d}~C_f^?>|fL2-P4JO{8o#lp`VQkq6WM(-QKH3J^T(50+Aer7YT4V1HH4Oud zmxZ1I@g6_X>4|cP1uv&qtfghZuf8gZT|l1=w8r)(2TB37OG*4stHal7&CZ2bwFQ(n zIR#KQtOJ|J{oE())g2gb6egFT6hJE+dY!?W{6rPC^`L3@4zuu=UqIH?`Uy4gKGF&! z8rwW*OaMAx2-(-+rwF^jIq%`uCgkQ-&dhSxkNTj5E<R(QW99u6G@_$i$L;`!G=b4xv? zd}tTs{vDuc_d(Qt;ArK??}Lwjs*!>Y1){NeLjZ%908CK1>9H`x!YY*v+}Z@$)&yjY zgYn6+fmyf$`SvpK4`)>V%YmplF#+gonFJ~4pQhXmQL`1u$W$e`3JAd1x(B%BHpjzX z#UQt=R{JGCVsF))cQ76a%>(lRmCJ^s=`&QaevrW#oR|ZnA(|-S&ZDkb0zUV>cO0Vm zftJ|80l?r3VC?X6(B!EQ>$hvcIid?cgWHb+_sjxKnV#a~Bl{tDJ8Qsw5Echo%#R#E zD;!+Oz(!B~+)~(!V>AYzJq@|$RRtfaji~vaHlSF(4s?HLH29ntR>V6NAqg-ZQ9oj@ zqI@mXDnKMZVx2|u{{tp15}h(5Ua0{UJ$fyZHO!;)4svptaY{`%_`BB$O_W!{-ZhWL zkbAa)5AX8|)fTRG{5h`@vn$YIE=&as z2NwhIEOcVU22jC6BZA~3`yh93Q^lwZL`|nI``d0^eHdS!<|GPV3y|WzXx!^T> z>9`e?U{s|40x~K5I9{|RJpcdz07*qoM6N<$ Eg43}^wEzGB literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/setting.png b/app/src/main/res/drawable/setting.png new file mode 100644 index 0000000000000000000000000000000000000000..34c2f2f96a7451c107eb0812b2610443d6b70b0b GIT binary patch literal 1101 zcmV-T1hV^yP)}EIH1@F_$x#yhk z&bi?QEb5+L#uClcOY47@0CC}xk5 zc-%E4a7zS-h1lr>xCw9ukcI{4KSSY!5WOVoJwV4a3Stx#>amF)P=>L|z{M7{6d^K@1RCI_8Jcz2<2>6X2nP;=SY zn$f8Po2HiQgyQxI3Od#Ve7}`^LP0JAyylqUO{EA}Xg_4x-w=3NL~Bn+8^2txQ}Bzc z0jyieuK?Lbkv5Nre(;JzT`CH?Wq$~utL#v_cL!kDbu83gN=F(m76Ms+%5J2}WTzsV zuNB&_>z{Z|H0?WgPi67!RHrez;)@>`xcXo=qq>wxi+e8%DRd!a8o6ix(k**Gh>%o6#Qhw(GejNw|&D;AL{#pil2Ec3c zGMNCF0r1HDtBg3&rfo&py|{5h3#@Bps6X){HC_;4lp^Dz$&cwsvkS0f)x{FWggod9 zHL&%z86I<=LsoJtAbkYF6xp4MHVv+bQasTnimf1?atn|GUSZwIH(J>>UeS-B5r-IPN>T# zmwi--?y8Z?&Ed>k_GX#sB#V0GrPE@kTeO@DsQO&V)CcShlEKrO!d4+(Ur@Q^n8ph$ z(#o=IY}9F}b2v`%5MSZ#YrovqCH_RWkLMy$8f;*S2WM zT#@kkK>+6*)7VigJyw%@sZ(~7aGmAbqF~aA8XGGEPL2@r>YCbOHTrQygFv2%MMfVz zWw&Yq0qbe3?+p TO|NVS00000NkvXXu0mjfhY}6P literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/time.png b/app/src/main/res/drawable/time.png new file mode 100644 index 0000000000000000000000000000000000000000..8a672eb7cb0fb490e90d02ce04eacf9f70725337 GIT binary patch literal 2219 zcmV;c2vqlpP)h8GxT}mqj3+1yMxA3pAdHM>r}Gt7sV$O+3=XE5@kJq-r##>KNsRXd-c{o1F8Ed46;=qjGYaPXf{I96gO(8i{uY=@KwmFQu!%)sM<3yLE$(y&~N5wW%yZZG}5+ z`q}78NtiNN6g1_aNx)>i%yQOm){Y8(KZ=*NTK2?@rTf%HE+L0q-$aYLhaB(qo{gRm z)R>HPR)&cC&Kx)eRL;pwLZZG9E#w8~(A$%3z^5 z1yl!<^)e6W?UoKO84YN(UQMbNUpzx@`dj>TDUT_M8a6Jk0q++;6G+d53})a zMT#(|fJxahN+USs30&5$&Gbu{f={cqHtHpp^^_c4$HmMH#*eJylOBg)^Uw41rL#Qq@C13s4-pw| zByHm|FqXjMEg)TNw0&j*=C)XKxIM;*)eeBO{Nl>H^geDWO+BExjgrWJtCOhxMB3=# zL18|nCqCx(rK@;>O6UM7>?J{(^YaaV75qcNF@LU_fmu9CCkyMQE>u8h3i9S== zDYyG8eMPA%u#`AOFKZ>}thL)|?{Qk`!S>Wj@CpJ$iDQ3xj|ELIsH>^E9c%||D+S*> zF#aU`WddkSkoY5PPPAl@>NMgO4rbJvGd4a)xA-H6t3HleHAK`4EP%;+Sq`+eC#cvm zfYb#p4q@I2a6JTe0WE+Bz)}-@`Uqlk;7BCA{w-{r00ylMVDR%g=Iyt8)72fj)ds>E z@F$?FJ)mLVL{g>|g5jK5bh!)EY2idaC=7&8Zo;8Z=%HF?LCz3R+h}At{H+c6)xgSa zkR1*?huZ)~PcaeyVGceWZ5OVjNMYf!22|Zf+5>w3l1<#h6k_^c08^2X*N(!G zLGU0P0$V~xgXNfq5Z4;~fa7;yPav$>Vip!phMo;Ys!rotAtd~v6Ek-dT8FintgQi? z+%*?(=)>mK{h@Y0WQ9OkOZd$>sPKWb$?&Q-Yy#d-gYSpHfq_pl^Hoa z+|iiJtcwP1ADgn7AH1N&%M{!+vG{{ivPFE)a6VqTRq2f;MH)>Xy~hgn=p4x04-Vt(|7DlT1PK%1!a+GG`z4f zLhQ3vcG&VKXUjh!SZMF@(e=~BSF9j0zNcAa%!j(;;58Jy22gOLoHth-rAiyjz=@0L z96Q}3C@Uq0?5Q#bz}07Eh*3u-lJ52qjxFiNk@N)1aKY81yp>WxMU9T3Q|9A8!e#kf z0z1o|Q$Tev`J9}LM4fhQK0UPu=~FnLR=*m=+aKi7K6(ayUR+3>blf&ICwYwIUm?)AL#a#9FNYyo&ri(uSAM>o6>iEaLy**Wl?TuVr!Fd3eW0GtY z8q%#VG~L;GltFtZie8RVFEBBG9qtP)`hrW+#7<0Py1T{tzhuyvlet+^7XSg?I{c|6 tKx!z}X?fsRN$KJk;kX-hmohu~{{Y=33sy2ehD!hd002ovPDHLkV1g6pIpzQW literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/user_account.png b/app/src/main/res/drawable/user_account.png new file mode 100644 index 0000000000000000000000000000000000000000..e70142aef6c941e1cbd7a0b73cb636eaf598b665 GIT binary patch literal 1045 zcmV+w1nT>VP)OlMrbW68Wlw)p@P9uOm}uS&CZe8X7b$KnZ#V?)7*3azkAO; z=gb*lK4XVn$r9a+avLI*xuvSZ2;Xx_j&i^l4k{;s3}d6UNVpAnWYS*brwQ;a(=?8t z*>)1;C;fE&!LeiqA}zoW%3F{O%H~!KVEMP)jIuGaaSB__=Pzd~5n9 z9Oq}?B$ly0-`f0OGt~*&1gyg{2Id9zj7_@+_zI*8E7Ck$V=mZC-UV_RWG`0a%cC?A}e@b&U>13?=of|LZkvKvT9!{)n8S!`+BN3PUXI7p95Kr z=mz3OzyC+VvzV%4V`z30iSo|_-Fa;E0VI43SUNkB{ax)@H0ia3-C9c>NH?MfD2be< zT~aeP(WVhHsnw|L0Cn%Umu#e&E}0Pv!NHzoi`|C93ka1cV+el&BW|k)RG?HL?g<$t z#2dtoc0ca~FO9ALuD}WRfNUxt+D~ZwQ97=4>wxbF4mR!6fZHT=q1k>2pJIuQGtN4Y zI?x8-4=m$GUn;q%3@}Xlcc3a?Coz??_G7>&z!@xKji0JNxFyw%Y9p`(%lNdYpw~7D zuMsz1DrQ?89J8-S7zXLVifs2gMQ+|}6or+x(y zbe8ok3~Z)j;8^qOt-YRF*-659cY)wstNTj6T3ht=?r)D?(c#tke764q8UA!G0uacS P00000NkvXXu0mjfj0o`N literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/user_general.png b/app/src/main/res/drawable/user_general.png new file mode 100644 index 0000000000000000000000000000000000000000..cf579477be3e1bb299522bba2a8bfc27fb1ef0c9 GIT binary patch literal 402 zcmV;D0d4+?P)T1>Z)AKXD*b39g)*r53M?X&D;=MB3EsVC^;DHkhleEIoF{rjJ9gvJ|eFHGDkbT=DYXe}B7u`Tgk=p*RM~zy9<_jG39KWU}j~=@bPuF_w{| whG4Zwj-kZp8MT<0P@;;O(V(VEFcM=30DI2tA7r+V#{d8T07*qoM6N<$f)V+|y8r+H literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/user_icon.png b/app/src/main/res/drawable/user_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d5309b1e40b0dd814a99e7e4f33fdd00098705a2 GIT binary patch literal 5995 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 KlRg~8&& zy#Dr z?Y$gwW~*0rn$>a;)D-xdiK?J(IRxs!t%03*S_codHj9CGH%fPomTO+V=CGQehU2zG zH3tCK3)@r#y!QF&3*b4%A)-=v_@u%j;JknJV>6~i9EezQF{T(eUcuC2hQRN;8_ux{ z))u~F=GrE;Gp`QLr!=m9AAoE%gS8u_#Ih{$C^2&}IuW%pR?v9x*p>{lwv>yqwu$}B zlj2BeRKE6i#XAqnzZS2pJ7oz{A}le-IwHaIYVdHK?09PP@?ac-I=L`J3Zzb?M@GuG za>_INGiqutPG+?_&{q3UF9o$kH!U4%G))>~)zoN$?yQ)|a*5g|ZM;4B06Z9@ z#9Lx9l|mwAW(a9gl6vcd)`zlfk!=(K(ZoWOR=m+R(!I>?oX-rqOBb@cu&LSy-M86% z^Zm{_-*?U#!d3dwRdVq^{I9Ki)=T}k$!j?pC|MaO_+~%+IS|neP{glPx9O*BM!hUp z)2&Jp+{%CpK-td7G&b8ae4`8|zkd#(A=t8+8mqrrY7k4pZX>jZh~An@#60y*Xym$8 zY^`)2Cqx0h7ll|O0~agg>?LPVad0nr)weU@8DUMg?tIbrd-9~615j_KfTek;~#%DZEUUfsNM4B1?7Qn3$%U;tL8NM4NO#q$b zRqL~YJ*L&b;P(Nv81B5*c#UsDly9S^>K~GmJ=Pn#Sz-E`!Dmf({(9~hXn~++5O!0Y z`fgV66TQ}*l5qmyTq3@&XVzZ{qSpW%Ca?O)g61-}hmf&- zFX%aXYRj7$_pzrp`XIA?BnHS<2lw=a%h^UBfQrP+Tcdv*ci9(0WiqVzuPNd|<@(YI zv7)?yZM+&D>t7|Uhvy-}C?IO6u4*h9=L0?+1mFBV*7RTtglL{SqnO)?=$<$_%1rGf zcrO_17tg?D&m7tlo-8HsR%g3`&>KJ9DzFIWj)83u^cldvFE~Jw@i;I_3TpJ4ys_Hu z=@l}!xSZLpV4{*n>&K!y?2CoPGI{|l&j2(6JNG;1q~flV<$&x1V*!2{#^eGxw!HiW zKqWDl_8IQnUFqtS>HkzXY`Ziz<0N=tP5HOWcx*fUP52vN*)opH>QmzFwM?)Vp_fY@<002ovPDHLkV1ns25UT(H literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/content_product.xml b/app/src/main/res/layout/content_product.xml index c946607..35c06c7 100644 --- a/app/src/main/res/layout/content_product.xml +++ b/app/src/main/res/layout/content_product.xml @@ -1,11 +1,27 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - + + + + + android:layout_marginTop="10dp" + android:background="#E8E8E8" + android:horizontalSpacing="10dp" + android:verticalSpacing="10dp" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:numColumns="2"/> + \ No newline at end of file