Эх сурвалжийг харах

1.修改Android Apex Drivers后台修改过的Order状态处理。

Pen Li 7 жил өмнө
parent
commit
5e6ed228e7

+ 132 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/BadgeView/BadgeView.java

@@ -0,0 +1,132 @@
+package com.usai.redant.apexdrivers.BadgeView;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.RoundRectShape;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+
+
+public class BadgeView extends android.support.v7.widget.AppCompatTextView {
+
+
+    private int mBadgeNumber;
+    private int mTextW,mTextH;
+
+    public BadgeView(Context context) {
+        this(context,null);
+    }
+
+    public BadgeView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs,android.R.attr.textViewStyle);
+    }
+
+    public BadgeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+
+        init();
+    }
+
+    private void init() {
+
+        setTextColor(Color.WHITE);
+        setTypeface(Typeface.DEFAULT);
+        setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
+        setGravity(Gravity.CENTER);
+
+        setBadgeCount(0);
+
+    }
+
+
+    public void setBackground(int dipRadius, int badgeColor) {
+        int radius = dip2Px(dipRadius);
+        float[] radiusArray = new float[] { radius, radius, radius, radius, radius, radius, radius, radius };
+
+        RoundRectShape roundRect = new RoundRectShape(radiusArray, null, null);
+        ShapeDrawable bgDrawable = new ShapeDrawable(roundRect);
+        bgDrawable.getPaint().setColor(badgeColor);
+//        setBackground(bgDrawable);
+
+        setBackgroundDrawable(bgDrawable);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        if (mTextW == 0 && mTextH == 0) { // constraintLayout 会调用一次,显示正确。否则RelativeLayout会调用多次,导致Max + 20多次。
+
+            int w = getMeasuredWidth();
+            int h = getMeasuredHeight();
+
+            mTextW = w;
+            mTextH = h;
+
+            int max = Math.max(w,h);
+
+            getLayoutParams().height = max;
+            getLayoutParams().width = max;
+
+            Integer count = getBadgeCount();
+            if (count != null && count >= 10) {
+                getLayoutParams().width = max + 20;
+            }
+
+            setLayoutParams(getLayoutParams());
+
+            setBackground(max / 2, Color.RED);
+        }
+
+    }
+
+    @Override
+    public void setText(CharSequence text, BufferType type) {
+        if (text == null || text.toString().equalsIgnoreCase("0") || text.length() == 0) {
+            setVisibility(View.GONE);
+        } else {
+            setVisibility(View.VISIBLE);
+        }
+        super.setText(text, type);
+
+        clear();
+        requestLayout();
+    }
+
+    private void clear() {
+        mTextW = 0;
+        mTextH = 0;
+    }
+
+    public void setBadgeCount(int count) {
+        mBadgeNumber = count;
+        if (count > 99) {
+            setText("99+");
+        } else {
+            setText(String.valueOf(count));
+        }
+    }
+
+    public Integer getBadgeCount() {
+        return mBadgeNumber;
+    }
+
+
+    /*
+     * converts dip to px
+     */
+    private int dip2Px(float dip) {
+        return (int) (dip * getContext().getResources().getDisplayMetrics().density + 0.5f);
+    }
+
+    public static int px2dp(Context context, float pxValue) {
+        float scale = context.getResources().getDisplayMetrics().density;
+        return (int) (pxValue / scale + 0.5f);
+    }
+
+}

+ 1 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeCellLayout.java

@@ -95,7 +95,7 @@ public class HomeCellLayout extends RelativeLayout implements HomeOrderModel.Ord
         orderType2Tv.setText(model.order_type2);
         statusView.setImageBitmap(model.getIcon());
 
-        if (model.status == HomeOrderModel.OrderStatusNew) {
+        if (model.backendFlag) {
             markView.setVisibility(View.VISIBLE);
         } else {
             markView.setVisibility(View.GONE);

+ 92 - 11
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeFragment.java

@@ -1,5 +1,6 @@
 package com.usai.redant.apexdrivers.Home;
 
+import android.app.Activity;
 import android.app.ProgressDialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -11,6 +12,7 @@ import android.os.Handler;
 import android.os.Message;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.constraint.ConstraintLayout;
 import android.support.v4.app.Fragment;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.app.AlertDialog;
@@ -29,6 +31,7 @@ import android.widget.TextView;
 
 
 import com.usai.redant.apexdrivers.ApexDriverApplication;
+import com.usai.redant.apexdrivers.BadgeView.BadgeView;
 import com.usai.redant.apexdrivers.Detail.DetailActivity;
 import com.usai.redant.apexdrivers.R;
 import com.usai.redant.rautils.Utils.Network;
@@ -45,6 +48,8 @@ public class HomeFragment extends Fragment {
     public final static String HomeReloadBroadcastAction = "com.usai.redant.apexdriver.home_refresh";
     private final static String HomeSaveDataKey = "HomeSaveDataKey";
 
+    private final static int REQUEST_MORE_CODE = 0;
+
     private Context mCtx;
     private HomeFragment self = this;
     private ExpandableListView mListView;
@@ -98,6 +103,11 @@ public class HomeFragment extends Fragment {
                     mSelectedModel.setSelection(true);
                 }
 
+                if (orderModel.getBackendFlag()) {
+                    orderModel.setBackendFlag(!orderModel.getBackendFlag());
+                    sectionModel.setBackendFlagCount(--sectionModel.backendFlagCount);
+                }
+
                 Intent intent = DetailActivity.build(mCtx,orderModel.orderID,orderModel.status,orderModel.order_type2);
                 mCtx.startActivity(intent);
 
@@ -154,6 +164,24 @@ public class HomeFragment extends Fragment {
         }
     }
 
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+
+        if (requestCode == REQUEST_MORE_CODE) {
+
+            if (requestCode == Activity.RESULT_OK && data != null) {
+
+                boolean reload = data.getBooleanExtra("reload",false);
+                if (reload) {
+                    loadData();
+                }
+            }
+        }
+
+
+    }
+
     @Override
     public void onDestroy() {
         super.onDestroy();
@@ -210,13 +238,14 @@ public class HomeFragment extends Fragment {
                     for (int i = 0; i < sectionArr.length(); i++) {
 
                         JSONObject section = sectionArr.getJSONObject(i);
-                        HomeSectionModel model = new HomeSectionModel();
+                        HomeSectionModel model = new HomeSectionModel(mCtx);
                         model.section = i;
 
                         model.type = section.optInt("type");
                         model.title = section.optString("title");
                         model.setOrders(section.optJSONArray("orders"));
                         model.totalCount = section.optInt("totalCount",0);
+                        model.backendFlagCount = section.optInt("backendFlagCount");
 
                         mSectionArray.add(model);
                     }
@@ -356,15 +385,17 @@ public class HomeFragment extends Fragment {
 
     private class HomeListAdapter extends BaseExpandableListAdapter {
 
-        private class SectionHeaderHolder implements View.OnClickListener{
+        private class SectionHeaderHolder implements View.OnClickListener,HomeSectionModel.SectionModelListener{
 
             TextView titleTv;
+            BadgeView badgeView;
             Button expandBtn;
             WeakReference<HomeSectionModel> weakSectionModel;
 
             SectionHeaderHolder(View view) {
 
                 titleTv = view.findViewById(R.id.header_title_tv);
+                badgeView = view.findViewById(R.id.header_badge_tv);
                 expandBtn = view.findViewById(R.id.section_switch_btn);
                 expandBtn.setOnClickListener(this);
                 expandBtn.setText("More");
@@ -373,14 +404,18 @@ public class HomeFragment extends Fragment {
             }
 
             void bindSectionModel(HomeSectionModel model) {
-
-                titleTv.setText(model.title);
-                if (model.hasMore()) {
-                    expandBtn.setVisibility(View.VISIBLE);
+                if (weakSectionModel != null && weakSectionModel.get() != null) {
+                    weakSectionModel.get().listener = null;
+                }
+                if (model == null) {
+                    weakSectionModel = null;
                 } else {
-                    expandBtn.setVisibility(View.GONE);
+                    weakSectionModel = new WeakReference<>(model);
+                }
+                if (weakSectionModel != null) {
+                    weakSectionModel.get().listener = this;
                 }
-                weakSectionModel = new WeakReference<>(model);
+                refresh();
             }
 
             @Override
@@ -389,7 +424,31 @@ public class HomeFragment extends Fragment {
 
                 Intent intent = HomeMoreActivity.build(mCtx,sectionModel.type,sectionModel.title);
 
-                startActivity(intent);
+                startActivityForResult(intent,REQUEST_MORE_CODE);
+            }
+
+            @Override
+            public void refresh() {
+
+                HomeSectionModel model = null;
+                if (weakSectionModel != null) {
+                    model = weakSectionModel.get();
+                }
+
+                if (model != null) {
+                    titleTv.setText(model.title);
+                    badgeView.setBadgeCount(model.backendFlagCount);
+                    if (model.hasMore()) {
+                        expandBtn.setVisibility(View.VISIBLE);
+                    } else {
+                        expandBtn.setVisibility(View.GONE);
+                    }
+                } else {
+                    titleTv.setText(null);
+                    expandBtn.setVisibility(View.GONE);
+                }
+
+
             }
         }
 
@@ -530,13 +589,34 @@ public class HomeFragment extends Fragment {
         }
     }
 
-    private class HomeSectionModel {
+    private static class HomeSectionModel {
+
+        public interface SectionModelListener {
+            void refresh();
+        }
+
+
 
         int type; // OrderStatus
         ArrayList<HomeOrderModel> orders;
         String title;
         int section;
         long totalCount;
+        int backendFlagCount;
+        SectionModelListener listener;
+
+        private Context mContext;
+        public HomeSectionModel(Context context) {
+            mContext = context;
+        }
+
+        public void setBackendFlagCount(int count) {
+            backendFlagCount = count;
+
+            if (listener != null) {
+                listener.refresh();
+            }
+        }
 
         int orderCount() {
             if (orders == null) {
@@ -559,7 +639,7 @@ public class HomeFragment extends Fragment {
             for (int i = 0; i < orders.length(); i++) {
                 JSONObject order = orders.optJSONObject(i);
                 if (order != null) {
-                    HomeOrderModel model = new HomeOrderModel(mCtx);
+                    HomeOrderModel model = new HomeOrderModel(mContext);
                     model.status = order.optInt("status",0);
                     model.title = order.optString("title");
                     model.orderNo = order.optString("orderNo");
@@ -568,6 +648,7 @@ public class HomeFragment extends Fragment {
                     model.orderID = order.optString("orderID");
                     model.order_type2 = order.optString("order_type2");
                     model.setIconURL(order.optString("iconURL"));
+                    model.setBackendFlag(order.optBoolean("backendFlag"));
 
                     orderArr.add(model);
                 }

+ 17 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeMoreActivity.java

@@ -83,6 +83,8 @@ public class HomeMoreActivity extends AppCompatActivity implements AbsListView.O
     private JSONObject mFilter;
     private String mFilterParams;
 
+    private boolean reloadHome = false;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -139,6 +141,16 @@ public class HomeMoreActivity extends AppCompatActivity implements AbsListView.O
         }
     }
 
+    @Override
+    public void finish() {
+
+        Intent data = new Intent();
+        data.putExtra("reload",reloadHome);
+        setResult(RESULT_OK,data);
+
+        super.finish();
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
@@ -285,6 +297,11 @@ public class HomeMoreActivity extends AppCompatActivity implements AbsListView.O
                     mSelectedModel.setSelection(true);
                 }
 
+                if (orderModel.getBackendFlag()) {
+                    orderModel.setBackendFlag(!orderModel.getBackendFlag());
+                    reloadHome = true;
+                }
+
                 Intent intent = DetailActivity.build(mContext,orderModel.orderID,orderModel.status,orderModel.order_type2);
                 mContext.startActivity(intent);
 

+ 13 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/Home/HomeOrderModel.java

@@ -29,6 +29,7 @@ public class HomeOrderModel {
     boolean selected;
     String order_type2;
     String iconURL;
+    boolean backendFlag;
 
     OrderModelDelegate delegate;
 
@@ -47,6 +48,18 @@ public class HomeOrderModel {
         }
     }
 
+    public void setBackendFlag(boolean flag) {
+        backendFlag = flag;
+
+        if (delegate != null) {
+            delegate.refresh();
+        }
+    }
+
+    public boolean getBackendFlag() {
+        return backendFlag;
+    }
+
     public void setIconURL(String url) {
         iconURL = url;
 

+ 36 - 7
ApexDrivers/app/src/main/res/layout/section_header.xml

@@ -17,16 +17,45 @@
         android:textAllCaps="false"
         />
 
-    <TextView
-        android:id="@+id/header_title_tv"
+    <!--<TextView-->
+        <!--android:id="@+id/header_title_tv"-->
+        <!--android:layout_width="match_parent"-->
+        <!--android:layout_height="wrap_content"-->
+        <!--android:layout_centerVertical="true"-->
+        <!--android:layout_marginLeft="5dp"-->
+        <!--android:layout_toLeftOf="@id/section_switch_btn"-->
+        <!--android:textSize="25sp"-->
+        <!--android:textColor="#000000"-->
+        <!--android:text="New Order"-->
+        <!--/>-->
+
+
+    <RelativeLayout
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_centerVertical="true"
+        android:layout_height="50dp"
         android:layout_marginLeft="5dp"
         android:layout_toLeftOf="@id/section_switch_btn"
-        android:textSize="25sp"
-        android:textColor="#000000"
-        android:text="New Order"
+        >
+
+        <TextView
+            android:id="@+id/header_title_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:textSize="20sp"
+            android:textColor="#000000"
+            android:text="New Order"
+            />
+
+        <com.usai.redant.apexdrivers.BadgeView.BadgeView
+            android:id="@+id/header_badge_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_toRightOf="@id/header_title_tv"
+            android:layout_marginLeft="5dp"
         />
 
+    </RelativeLayout>
+
 </RelativeLayout>