Explorar el Código

1.完成Android Apex Drivers Message。

Pen Li hace 7 años
padre
commit
b46b5528f7
Se han modificado 20 ficheros con 881 adiciones y 19 borrados
  1. 7 2
      ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/ImageUtil.java
  2. 20 5
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/detail/DetailActivity.java
  3. 2 1
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeFragment.java
  4. 2 1
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeMoreActivity.java
  5. 1 0
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeOrderModel.java
  6. 401 1
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/message/MessageActivity.java
  7. 69 0
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/message/model/MessageModel.java
  8. 35 1
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/network/Network.java
  9. 67 1
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/SettingActivity.java
  10. 140 3
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/changepassword/ChangePasswordDialog.java
  11. 8 0
      ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/model/ActionModel.java
  12. BIN
      ApexDrivers/app/src/main/res/drawable-hdpi/backend_flag.png
  13. BIN
      ApexDrivers/app/src/main/res/drawable-ldpi/backend_flag.png
  14. BIN
      ApexDrivers/app/src/main/res/drawable-mdpi/backend_flag.png
  15. BIN
      ApexDrivers/app/src/main/res/drawable-xhdpi/backend_flag.png
  16. BIN
      ApexDrivers/app/src/main/res/drawable-xxhdpi/backend_flag.png
  17. 34 0
      ApexDrivers/app/src/main/res/layout/activity_message.xml
  18. 9 3
      ApexDrivers/app/src/main/res/layout/change_password_dialog.xml
  19. 2 1
      ApexDrivers/app/src/main/res/layout/home_order_cell.xml
  20. 84 0
      ApexDrivers/app/src/main/res/layout/message_item_cell.xml

+ 7 - 2
ApexDrivers/RAUtilsLibrary/src/main/java/com/usai/redant/rautils/utils/ImageUtil.java

@@ -148,9 +148,9 @@ public class ImageUtil {
             return bitmap;
         } else {
 
-            String appDir = appCacheDir(context);
+//            String appDir = appCacheDir(context);
+            String imgDir = imageCacheDir(context);
 
-            String imgDir = appDir + File.separator + "ra_image";
 
 //            File dir = new File(imgDir);
 //            if (!dir.exists()) {
@@ -197,6 +197,11 @@ public class ImageUtil {
         return root + appName;
     }
 
+    public static String imageCacheDir(Context context) {
+        String imgDir = appCacheDir(context) + File.separator + "ImageCache";
+        return imgDir;
+    }
+
     public static Bitmap loadImageFromFile(Context context, File file) {
         if (file == null) {
             return null;

+ 20 - 5
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/detail/DetailActivity.java

@@ -61,13 +61,15 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
     private final static String IntentOrderIDKey = "orderID";
     private final static  String IntentOrderStatusKey = "orderStatus";
     private final static  String IntentOrderType2Key = "orderType2";
+    private final static  String IntentStatusNoKey = "statusNo";
 
     private final static  String SaveDataKey = "DetailSaveJSON";
     private final static  String SaveOrderIDKey = "DetailSaveOrderID";
     private final static  String SaveOrderStatusKey = "DetailSaveOrderStatus";
     private final static  String SaveOrderType2Key = "DetailSaveOrderType2";
+    private final static  String SaveStatusNo2Key = "DetailSaveStatusNo";
 
-    public static Intent build(Context context, String orderID,int status,String type2) {
+    public static Intent build(Context context, String orderID,int status,String type2,String statusNo) {
 
         if (context == null) {
             return null;
@@ -80,12 +82,17 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
         if (type2 != null) {
             intent.putExtra(IntentOrderType2Key,type2);
         }
+        if (statusNo != null) {
+            intent.putExtra(IntentStatusNoKey,statusNo);
+        }
+
         intent.putExtra(IntentOrderStatusKey,status);
         return intent;
     }
 
     private String mOrderID;
     private String mOrderType2;
+    private String mStatusNo;
     private int mOrderStatus;
 
     private Context mCtx = this;
@@ -110,9 +117,12 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
             actionBar.setDisplayHomeAsUpEnabled(true);
         }
 
-        mOrderID = getIntent().getStringExtra(IntentOrderIDKey);
-        mOrderType2 = getIntent().getStringExtra(IntentOrderType2Key);
-        mOrderStatus = getIntent().getIntExtra(IntentOrderStatusKey,0);
+        if (getIntent() != null) {
+            mOrderID = getIntent().getStringExtra(IntentOrderIDKey);
+            mOrderType2 = getIntent().getStringExtra(IntentOrderType2Key);
+            mOrderStatus = getIntent().getIntExtra(IntentOrderStatusKey,0);
+            mStatusNo = getIntent().getStringExtra(IntentStatusNoKey);
+        }
 
         mHandler = new DetailHandler(this);
 
@@ -167,6 +177,7 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
             mOrderID = savedInstanceState.getString(SaveOrderIDKey);
             mOrderType2 = savedInstanceState.getString(SaveOrderType2Key);
             mOrderStatus = savedInstanceState.getInt(SaveOrderStatusKey);
+            mStatusNo = savedInstanceState.getString(SaveStatusNo2Key);
 
         } else {
             loadData();
@@ -198,6 +209,10 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
         }
         outState.putInt(SaveOrderStatusKey,mOrderStatus);
 
+        if (mStatusNo != null) {
+            outState.putString(SaveStatusNo2Key,mStatusNo);
+        }
+
         sendLifeCircleBroadCast(0);
     }
 
@@ -344,7 +359,7 @@ public class DetailActivity extends AppCompatActivity implements DetailAdapter.D
             @Override
             public void run() {
 
-                JSONObject json = com.usai.redant.apexdrivers.network.Network.requestOrderDetail(mCtx,mOrderID,mOrderStatus,mOrderType2);
+                JSONObject json = com.usai.redant.apexdrivers.network.Network.requestOrderDetail(mCtx,mOrderID,mOrderStatus,mOrderType2,mStatusNo);
 
                 Message msg = new Message();
                 msg.what = DetailHandler.DetailActionReloadData;

+ 2 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeFragment.java

@@ -107,7 +107,7 @@ public class HomeFragment extends Fragment implements HomeHeaderView.HomeHeaderD
                     sectionModel.setBackendFlagCount(--sectionModel.backendFlagCount);
                 }
 
-                Intent intent = DetailActivity.build(mCtx,orderModel.orderID,orderModel.status,orderModel.order_type2);
+                Intent intent = DetailActivity.build(mCtx,orderModel.orderID,orderModel.status,orderModel.order_type2,orderModel.status_no);
                 mCtx.startActivity(intent);
 
                 return false;
@@ -756,6 +756,7 @@ public class HomeFragment extends Fragment implements HomeHeaderView.HomeHeaderD
                     model.order_type2 = order.optString("order_type2");
                     model.setIconURL(order.optString("iconURL"));
                     model.setBackendFlag(order.optBoolean("backendFlag"));
+                    model.status_no = order.optString("status_no");
 
                     orderArr.add(model);
                 }

+ 2 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeMoreActivity.java

@@ -302,7 +302,7 @@ public class HomeMoreActivity extends AppCompatActivity implements AbsListView.O
                     reloadHome = true;
                 }
 
-                Intent intent = DetailActivity.build(mContext,orderModel.orderID,orderModel.status,orderModel.order_type2);
+                Intent intent = DetailActivity.build(mContext,orderModel.orderID,orderModel.status,orderModel.order_type2,orderModel.status_no);
                 mContext.startActivity(intent);
 
             }
@@ -452,6 +452,7 @@ public class HomeMoreActivity extends AppCompatActivity implements AbsListView.O
                         model.orderID = order.optString("orderID");
                         model.order_type2 = order.optString("order_type2");
                         model.setIconURL(order.optString("iconURL"));
+                        model.status_no = order.optString("status_no");
 
                         mOrders.add(model);
                     }

+ 1 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/home/HomeOrderModel.java

@@ -24,6 +24,7 @@ public class HomeOrderModel {
     String order_type2;
     String iconURL;
     boolean backendFlag;
+    String status_no;
 
     OrderModelDelegate delegate;
 

+ 401 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/message/MessageActivity.java

@@ -1,15 +1,45 @@
 package com.usai.redant.apexdrivers.message;
 
+import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Color;
+import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.LayoutInflater;
 import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
 
+import com.usai.redant.apexdrivers.ApexDriverApplication;
 import com.usai.redant.apexdrivers.R;
+import com.usai.redant.apexdrivers.detail.DetailActivity;
+import com.usai.redant.apexdrivers.message.model.MessageModel;
+import com.usai.redant.apexdrivers.network.Network;
+import com.usai.redant.apexdrivers.utils.OperationQueue;
 
-public class MessageActivity extends AppCompatActivity {
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.w3c.dom.Text;
+
+import java.util.ArrayList;
+
+import static com.usai.redant.rautils.utils.RAUtil.dp2px;
+import static com.usai.redant.rautils.utils.RAUtil.sp2px;
+
+public class MessageActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
 
     public static void startMessageActivity(Context context) {
         if (context == null) {
@@ -21,6 +51,21 @@ public class MessageActivity extends AppCompatActivity {
         context.startActivity(intent);
     }
 
+    private static final String SavedMessagesKey = "SavedMessages";
+
+    private Context mCtx = this;
+    private MessageActivity self = this;
+
+    private SwipeRefreshLayout mRefresh;
+    private ListView mListView;
+    private MessageAdapter mAdapter;
+    private TextView footer;
+    private TextView mEmptyView;
+
+    private ArrayList<MessageModel> messages = new ArrayList<>();
+    private int offset = 0;
+    private static final int limit = 20;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -31,6 +76,36 @@ public class MessageActivity extends AppCompatActivity {
             actionBar.setHomeButtonEnabled(true);
             actionBar.setDisplayHomeAsUpEnabled(true);
         }
+
+        mAdapter = new MessageAdapter();
+
+        mRefresh = findViewById(R.id.message_refresh_view);
+        mRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+            @Override
+            public void onRefresh() {
+                reload();
+            }
+        });
+
+        mListView = findViewById(R.id.message_list_view);
+        configureListView();
+
+        if (savedInstanceState != null) {
+            String messagesStr = savedInstanceState.getString(SavedMessagesKey);
+            if (!TextUtils.isEmpty(messagesStr)) {
+                try {
+                    JSONArray array = new JSONArray(messagesStr);
+                    handleJsonArray(array);
+
+                } catch (JSONException e) {
+                    e.printStackTrace();
+                }
+            }
+        } //
+
+        if (messages.size() == 0) {
+            loadData();
+        }
     }
 
     @Override
@@ -43,4 +118,329 @@ public class MessageActivity extends AppCompatActivity {
         }
         return super.onOptionsItemSelected(item);
     }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        JSONArray array = prepareMessages2Save();
+        if (array != null) {
+            outState.putString(SavedMessagesKey,array.toString());
+        }
+    }
+
+    /**
+     * Scroll Listener
+     * */
+    private int last_index;
+    private int total_index;
+    private boolean isLoading = false;//表示是否正处于加载状态
+
+    @Override
+    public void onScrollStateChanged(AbsListView view, int scrollState) {
+        if(last_index == total_index && (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE))
+        {
+            // 表示此时需要显示刷新视图界面进行新数据的加载(要等滑动停止)
+            if(!isLoading)
+            {
+                // 设置刷新界面可见
+                footer.setVisibility(View.VISIBLE);
+                loadMore();
+            }
+        }
+    }
+
+    @Override
+    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+        last_index = firstVisibleItem+visibleItemCount;
+        total_index = totalItemCount;
+    }
+
+    private void configureListView() {
+
+        footer = new TextView(mCtx);
+        footer.setBackgroundColor(Color.WHITE);
+        footer.setGravity(Gravity.CENTER);
+        footer.setText("loading...");
+        footer.setTextSize(sp2px(mCtx,7));
+        footer.setTextColor(Color.BLACK);
+        footer.setVisibility(View.INVISIBLE);
+
+        AbsListView.LayoutParams footerLayoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,dp2px(mCtx,40));
+        footer.setLayoutParams(footerLayoutParams);
+
+        mListView.addFooterView(footer);
+        mListView.setOnScrollListener(this);
+
+        mListView.setAdapter(mAdapter);
+
+        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+
+                MessageModel model = self.messages.get(position);
+                if (model.isNew) {
+                    model.setIsNew(false);
+                }
+
+                Intent intent = DetailActivity.build(mCtx,model.orderID,model.orderType,model.orderType2,model.statusNo);
+                startActivity(intent);
+            }
+        });
+
+        mEmptyView = findViewById(R.id.message_empty_btn);
+        mEmptyView.setText("There is no data\nPlease click to reload");
+        mEmptyView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                loadData();
+            }
+        });
+        mListView.setEmptyView(findViewById(R.id.message_empty_view));
+    }
+
+    /**
+     * Data
+     * */
+
+    private ProgressDialog mProgressDialog;
+    private void showProgressDialog() {
+        if (mProgressDialog == null) {
+            mProgressDialog = new ProgressDialog(this);
+            mProgressDialog.setMessage("loading...");
+            mProgressDialog.setCancelable(false);
+            mProgressDialog.show();
+        }
+    }
+
+    private void dismissProgressDialog() {
+        if (mProgressDialog != null && mProgressDialog.isShowing()) {
+            mProgressDialog.dismiss();
+        }
+        mProgressDialog = null;
+    }
+
+    private void showWarningMsg(String msg) {
+        if (msg == null || msg.length() == 0) {
+            return;
+        }
+
+        new AlertDialog.Builder(mCtx).setTitle("Warning")
+                .setMessage(msg)
+                .setPositiveButton("Ok",null)
+                .show();
+    }
+
+    private static final int LoadActionTypeInitial = 0;
+    private static final int LoadActionTypeReload = 1;
+    private static final int LoadActionTypeMore = 2;
+
+
+    private void loadData() {
+        offset = 0;
+        loadData(LoadActionTypeInitial);
+    }
+
+    private void reload() {
+        offset = 0;
+        loadData(LoadActionTypeReload);
+    }
+
+    private void loadMore() {
+        offset = messages.size();
+        loadData(LoadActionTypeMore);
+    }
+
+    private void loadData(final int type) {
+
+        if (isLoading) {
+            return;
+        }
+        isLoading = true;
+
+        showProgressDialog();
+
+        ApexDriverApplication.sharedApplication().getNetworkQueue().addOperationTask(new OperationQueue.OperationBackgroundCallBack() {
+
+            @Override
+            public Object operationDoInBackground() {
+
+                return Network.requestMessage(offset, limit);
+            }
+        }, new OperationQueue.OperationCompletionCallBack() {
+
+            @Override
+            public void operationCompletion(Object object) {
+
+                dismissProgressDialog();
+
+                if (mRefresh.isRefreshing()) {
+                    mRefresh.setRefreshing(false);
+                }
+
+                JSONObject json = (JSONObject) object;
+                if (json != null) {
+
+                    int result = json.optInt("result");
+                    if (result == com.usai.redant.rautils.utils.Network.RESULT_TRUE) {
+
+                        if (type != LoadActionTypeMore) {
+                            self.messages.clear();
+                        }
+
+                        JSONArray messages = json.optJSONArray("messages");
+                        handleJsonArray(messages);
+
+                    } else {
+
+                        String msg = json.optString("err_msg");
+                        if (TextUtils.isEmpty(msg)) {
+                            msg = "Sorry,something is wrong";
+                        }
+                        showWarningMsg(msg);
+                    }
+
+                } else {
+                    showWarningMsg("Sorry,something is wrong");
+                }
+
+                isLoading = false;
+            }
+        }, new OperationQueue.OperationCancelCallBack() {
+            @Override
+            public void operationCancelled() {
+
+                dismissProgressDialog();
+
+                isLoading = false;
+            }
+        });
+
+    }
+
+    private JSONArray prepareMessages2Save() {
+        if (messages.size() > 0) {
+
+            JSONArray array = new JSONArray();
+            for (int i = 0; i < messages.size(); i++) {
+
+                MessageModel model = messages.get(i);
+                JSONObject json = model.toJson();
+                if (json != null) {
+                    array.put(json);
+                }
+            }
+
+            return array;
+        }
+        return null;
+    }
+
+    private void handleJsonArray(JSONArray messages) {
+        if (messages == null) {
+            return;
+        }
+
+        if (messages != null) {
+
+            for (int i = 0; i < messages.length(); i++) {
+                JSONObject msgItem = messages.optJSONObject(i);
+                if (msgItem != null) {
+
+                    MessageModel model = new MessageModel();
+                    model.setValuesForKeysWithJSON(msgItem);
+
+                    self.messages.add(model);
+                }
+            }
+
+        }
+
+        mAdapter.notifyDataSetChanged();
+    }
+
+    private class MessageAdapter extends BaseAdapter {
+
+        @Override
+        public int getCount() {
+            return self.messages.size();
+        }
+
+        @Override
+        public Object getItem(int position) {
+            return self.messages.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+
+
+            Holder holder;
+            if (convertView == null) {
+
+                convertView = LayoutInflater.from(mCtx).inflate(R.layout.message_item_cell,null);
+                holder = new Holder(convertView);
+
+            } else {
+                holder = (Holder)convertView.getTag();
+            }
+
+            MessageModel model = self.messages.get(position);
+            holder.setModel(model);
+
+            return convertView;
+        }
+
+
+        private class Holder implements MessageModel.MessageModelDelegate{
+
+            TextView titleTv,msgTv,dateTv;
+            ImageView newMark;
+
+            Holder(View v) {
+                v.setTag(this);
+
+                titleTv = v.findViewById(R.id.message_title_tv);
+                msgTv = v.findViewById(R.id.message_msg_tv);
+                dateTv = v.findViewById(R.id.message_date_tv);
+                newMark = v.findViewById(R.id.message_new_mark);
+            }
+
+            public MessageModel model;
+            public void setModel(MessageModel model) {
+                if (this.model != null) {
+                    this.model.delegate = null;
+                }
+                this.model = model;
+                if (this.model != null) {
+                    this.model.delegate = this;
+                }
+
+                refreshUI();
+            }
+
+            @Override
+            public void refreshUI() {
+
+                if (model != null) {
+
+                    titleTv.setText(model.title);
+                    msgTv.setText(model.message);
+                    dateTv.setText(model.date);
+                    newMark.setVisibility(model.isNew ? View.VISIBLE : View.INVISIBLE);
+
+                } else {
+                    titleTv.setText(null);
+                    msgTv.setText(null);
+                    dateTv.setText(null);
+                    newMark.setVisibility(View.INVISIBLE);
+                }
+            }
+        }
+    }
 }

+ 69 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/message/model/MessageModel.java

@@ -0,0 +1,69 @@
+package com.usai.redant.apexdrivers.message.model;
+
+import com.usai.redant.apexdrivers.base.BasicObject;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class MessageModel extends BasicObject {
+
+    public interface MessageModelDelegate {
+        void refreshUI();
+    }
+
+    public String title;
+    public String message;
+    public String date;
+    public boolean isNew;
+
+    public String orderID;
+    public String orderType2;
+    public String statusNo;
+    public int orderType;
+
+    public MessageModelDelegate delegate;
+
+    public void setIsNew(boolean isNew) {
+        this.isNew = isNew;
+
+        if (delegate != null) {
+            delegate.refreshUI();
+        }
+    }
+
+    public JSONObject toJson() {
+
+        try {
+
+            JSONObject json = new JSONObject();
+
+            if (title != null) {
+                json.put("title",title);
+            }
+            if (message != null) {
+                json.put("message",message);
+            }
+            if (date != null) {
+                json.put("date",date);
+            }
+            json.put("isNew",isNew);
+
+            if (orderID != null) {
+                json.put("orderID",orderID);
+            }
+            if (orderType2 != null) {
+                json.put("orderType2",orderType2);
+            }
+            if (statusNo != null) {
+                json.put("statusNo",statusNo);
+            }
+            json.put("orderType",orderType);
+
+            return json;
+
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 35 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/network/Network.java

@@ -4,6 +4,7 @@ package com.usai.redant.apexdrivers.network;
 import android.app.Application;
 import android.content.Context;
 import android.os.Bundle;
+import android.text.TextUtils;
 
 
 import com.usai.redant.apexdrivers.ApexDriverApplication;
@@ -31,6 +32,8 @@ public class Network extends com.usai.redant.rautils.utils.Network {
     public static final String URL_REPORT_LOCATION = URL_HOST + "/j/mobile/uploadDriverLocation.mo/";
     public static final String URL_RETRIVED_PASSWORD = URL_HOST + "/j/mobile/resetPassword.mo/";
     public static final String URL_DRIVER_AVAILABLE = URL_HOST + "/j/mobile/updateDriverAvailable.mo/";
+    public static final String URL_CHANGE_PASSWORD = URL_HOST + "/j/mobile/updateDriverAvailable.mo/";
+    public static final String URL_MESSAGE_LIST = URL_HOST + "/j/mobile/moreDriverMessages.mo/";
 
     private static void prepareParams(Bundle params) {
         if (params == null) {
@@ -150,7 +153,7 @@ public class Network extends com.usai.redant.rautils.utils.Network {
 
     }
 
-    public static JSONObject requestOrderDetail(Context context,String orderID,int status,String type2) {
+    public static JSONObject requestOrderDetail(Context context,String orderID,int status,String type2,String statusNo) {
 
 
         if (orderID == null) {
@@ -163,6 +166,9 @@ public class Network extends com.usai.redant.rautils.utils.Network {
             params.putString("orderType2",type2);
         }
         params.putInt("orderType",status);
+        if (statusNo != null) {
+            params.putString("statusNo",statusNo);
+        }
 
         prepareParams(params);
         String jsonStr = getJson(URL_DETAIL,params);
@@ -263,6 +269,34 @@ public class Network extends com.usai.redant.rautils.utils.Network {
         return handleJson(jsonStr);
     }
 
+    public static JSONObject changePassword(String old,String pass) {
+
+        Bundle params = new Bundle();
+        if (!TextUtils.isEmpty(old)) {
+            params.putString("oldPassword",old);
+        }
+        if (!TextUtils.isEmpty(pass)) {
+            params.putString("newPassword",pass);
+        }
+
+        prepareParams(params);
+        String jsonStr = getJson(URL_CHANGE_PASSWORD,params);
+
+        return handleJson(jsonStr);
+    }
+
+    public static JSONObject requestMessage(int offset,int limit) {
+
+        Bundle params = new Bundle();
+        params.putInt("offset",offset);
+        params.putInt("limit",limit);
+
+        prepareParams(params);
+        String jsonStr = getJson(URL_MESSAGE_LIST,params);
+
+        return handleJson(jsonStr);
+    }
+
     public static JSONObject loadFakeData(Context context, int rawId) {
 
         try

+ 67 - 1
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/SettingActivity.java

@@ -1,14 +1,18 @@
 package com.usai.redant.apexdrivers.setting;
 
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.support.v7.app.ActionBar;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ExpandableListView;
+import android.widget.Toast;
 
+import com.usai.redant.apexdrivers.ApexDriverApplication;
 import com.usai.redant.apexdrivers.R;
 import com.usai.redant.apexdrivers.network.Network;
 import com.usai.redant.apexdrivers.setting.changepassword.ChangePasswordDialog;
@@ -17,10 +21,13 @@ import com.usai.redant.apexdrivers.setting.model.BaseModel;
 import com.usai.redant.apexdrivers.setting.model.OptionModel;
 import com.usai.redant.apexdrivers.setting.model.SectionModel;
 import com.usai.redant.apexdrivers.setting.option.OptionActivity;
+import com.usai.redant.apexdrivers.utils.OperationQueue;
+import com.usai.redant.rautils.utils.ImageUtil;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
+import java.io.File;
 import java.util.ArrayList;
 
 public class SettingActivity extends AppCompatActivity implements SettingAdapter.SettingAdapterDelegate {
@@ -191,10 +198,69 @@ public class SettingActivity extends AppCompatActivity implements SettingAdapter
             }
             break;
             case ActionModel.ActionTypeCleanCache: {
-
+                cleanDisk(model);
             }
             break;
         }
 
     }
+
+    private void cleanDisk(final ActionModel model) {
+
+        if (model == null) {
+            return;
+        }
+        model.setActive(true);
+
+        new AlertDialog.Builder(mCtx)
+                .setTitle("Warning")
+                .setMessage("are you sure to clean cached file")
+                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        model.setActive(false);
+                    }
+                })
+                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+
+                        ApexDriverApplication.sharedApplication().getNetworkQueue().addOperationTask(new OperationQueue.OperationBackgroundCallBack() {
+                            @Override
+                            public Object operationDoInBackground() {
+
+                                String imageCacheDir = ImageUtil.imageCacheDir(mCtx);
+                                File file = new File(imageCacheDir);
+                                if (file.exists() && file.isDirectory()) {
+                                    file.delete();
+                                }
+                                try {
+                                    Thread.sleep(1000);
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+
+                                return null;
+                            }
+                        }, new OperationQueue.OperationCompletionCallBack() {
+                            @Override
+                            public void operationCompletion(Object object) {
+
+                                model.setActive(false);
+                                Toast.makeText(mCtx,"Clean Success",Toast.LENGTH_LONG).show();
+
+                            }
+                        },null);
+
+                    }
+                })
+                .setOnCancelListener(new DialogInterface.OnCancelListener() {
+                    @Override
+                    public void onCancel(DialogInterface dialog) {
+                        model.setActive(false);
+                    }
+                })
+                .show();
+
+    }
 }

+ 140 - 3
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/changepassword/ChangePasswordDialog.java

@@ -1,23 +1,38 @@
 package com.usai.redant.apexdrivers.setting.changepassword;
 
 import android.app.Dialog;
+import android.app.ProgressDialog;
 import android.content.Context;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
+import android.text.TextUtils;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
 import android.widget.LinearLayout;
+import android.widget.TextView;
 
+import com.usai.redant.apexdrivers.ApexDriverApplication;
 import com.usai.redant.apexdrivers.R;
+import com.usai.redant.apexdrivers.network.Network;
+import com.usai.redant.apexdrivers.utils.OperationQueue;
+
+import org.json.JSONObject;
 
 public class ChangePasswordDialog extends Dialog {
 
 
     private Context mCtx;
     private LinearLayout mRootView;
+    private TextView titleTv;
+    private EditText oldEt,newEt,confirmEt;
+    private Button cancelBtn,changeBtn;
 
     public ChangePasswordDialog(@NonNull Context context) {
         this(context,R.style.changePasswordDialog);
@@ -40,11 +55,133 @@ public class ChangePasswordDialog extends Dialog {
     private void init() {
         mRootView = (LinearLayout)LayoutInflater.from(mCtx).inflate(R.layout.change_password_dialog, null);
         setContentView(mRootView);
+
+        titleTv = mRootView.findViewById(R.id.change_password_title_tv);
+        oldEt = mRootView.findViewById(R.id.change_password_old_et);
+        newEt = mRootView.findViewById(R.id.change_password_new_et);
+        confirmEt = mRootView.findViewById(R.id.change_password_confirm_et);
+        cancelBtn = mRootView.findViewById(R.id.change_password_cancel_btn);
+        changeBtn = mRootView.findViewById(R.id.change_password_change_btn);
+
+        cancelBtn.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                dismiss();
+            }
+        });
+
+        changeBtn.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                hideKeyboard();
+                changePassword();
+            }
+        });
     }
 
-    private static int dp2px(Context context, float dpValue) {
-        float scale = context.getResources().getDisplayMetrics().density;
-        return (int) (dpValue * scale + 0.5f);
+    private void changePassword() {
+
+        final String oldPass = oldEt.getText().toString();
+        final String newPass = newEt.getText().toString();
+        String confirmPass = confirmEt.getText().toString();
+
+        if (TextUtils.isEmpty(oldPass) && TextUtils.isEmpty(newPass) && TextUtils.isEmpty(confirmPass)) {
+
+            new AlertDialog.Builder(mCtx)
+                    .setTitle("Warning")
+                    .setMessage("Required fields can not be empty!")
+                    .setPositiveButton("Ok",null)
+                    .show();
+
+            return;
+        }
+
+        if (!newPass.equals(confirmPass)) {
+
+            new AlertDialog.Builder(mCtx)
+                    .setTitle("Warning")
+                    .setMessage("New password not equal confirm password!")
+                    .setPositiveButton("Ok",null)
+                    .show();
+
+            return;
+        }
+
+        showProgressDialog();
+
+        ApexDriverApplication.sharedApplication().getNetworkQueue().addOperationTask(new OperationQueue.OperationBackgroundCallBack() {
+            @Override
+            public Object operationDoInBackground() {
+                return Network.changePassword(oldPass,newPass);
+            }
+        }, new OperationQueue.OperationCompletionCallBack() {
+            @Override
+            public void operationCompletion(Object object) {
+
+                dismissProgressDialog();
+
+                JSONObject json = (JSONObject)object;
+                if (json != null) {
+
+                    int result = json.optInt("result");
+                    if (result == com.usai.redant.rautils.utils.Network.RESULT_TRUE) {
+
+                        showWarningMsg("change password success");
+
+                    } else {
+                        String msg = json.optString("err_msg");
+                        if (TextUtils.isEmpty(msg)) {
+                            msg = "Sorry,something is wrong";
+                        }
+                        showWarningMsg(msg);
+                    }
+
+                } else {
+                    showWarningMsg("Sorry,something is wrong");
+                }
+
+            }
+        },null);
+
+    }
+
+    private void hideKeyboard() {
+
+        InputMethodManager imm = (InputMethodManager)mCtx.getSystemService(Context.INPUT_METHOD_SERVICE);
+        if(imm.isActive()&&getCurrentFocus()!=null){
+            if (getCurrentFocus().getWindowToken()!=null) {
+                imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+            }
+        }
+    }
+
+    private ProgressDialog mProgressDialog;
+    private void showProgressDialog() {
+        if (mProgressDialog == null) {
+            mProgressDialog = new ProgressDialog(mCtx);
+            mProgressDialog.setMessage("loading...");
+            mProgressDialog.setCancelable(false);
+            mProgressDialog.show();
+        }
+    }
+
+    private void dismissProgressDialog() {
+        if (mProgressDialog != null && mProgressDialog.isShowing()) {
+            mProgressDialog.dismiss();
+        }
+        mProgressDialog = null;
+    }
+
+    private void showWarningMsg(String msg) {
+        if (msg == null || msg.length() == 0) {
+            return;
+        }
+
+        new AlertDialog.Builder(mCtx).setTitle("Warning")
+                .setMessage(msg)
+                .setPositiveButton("Ok",null)
+                .show();
     }
 
     @Override

+ 8 - 0
ApexDrivers/app/src/main/java/com/usai/redant/apexdrivers/setting/model/ActionModel.java

@@ -8,4 +8,12 @@ public class ActionModel extends BaseModel {
 
     public int actionType;
     public boolean active;
+
+    public void setActive(boolean active) {
+        this.active = active;
+
+        if (getDelegate() != null) {
+            getDelegate().refreshUI();
+        }
+    }
 }

BIN
ApexDrivers/app/src/main/res/drawable-hdpi/backend_flag.png


BIN
ApexDrivers/app/src/main/res/drawable-ldpi/backend_flag.png


BIN
ApexDrivers/app/src/main/res/drawable-mdpi/backend_flag.png


BIN
ApexDrivers/app/src/main/res/drawable-xhdpi/backend_flag.png


BIN
ApexDrivers/app/src/main/res/drawable-xxhdpi/backend_flag.png


+ 34 - 0
ApexDrivers/app/src/main/res/layout/activity_message.xml

@@ -7,4 +7,38 @@
     android:layout_height="match_parent"
     tools:context=".message.MessageActivity">
 
+    <android.support.v4.widget.SwipeRefreshLayout
+        android:id="@+id/message_refresh_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <ListView
+            android:id="@+id/message_list_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+        </ListView>
+
+
+    </android.support.v4.widget.SwipeRefreshLayout>
+
+    <RelativeLayout
+        android:id="@+id/message_empty_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:id="@+id/message_empty_btn"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:padding="5dp"
+            android:gravity="center_horizontal"
+            android:background="@drawable/round_corner_bg"
+            android:textColor="#000000"
+            android:textSize="17sp"
+            android:singleLine="false"
+            />
+
+    </RelativeLayout>
+
 </android.support.constraint.ConstraintLayout>

+ 9 - 3
ApexDrivers/app/src/main/res/layout/change_password_dialog.xml

@@ -15,6 +15,7 @@
         >
 
         <TextView
+            android:id="@+id/change_password_title_tv"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textSize="18sp"
@@ -24,24 +25,27 @@
             />
 
         <EditText
+            android:id="@+id/change_password_old_et"
             android:layout_width="match_parent"
             android:layout_height="40dp"
             android:layout_margin="10dp"
-            android:hint="Old Password"
+            android:hint="Old password *required"
             />
 
         <EditText
+            android:id="@+id/change_password_new_et"
             android:layout_width="match_parent"
             android:layout_height="40dp"
             android:layout_margin="10dp"
-            android:hint="New Password"
+            android:hint="New password *required"
             />
 
         <EditText
+            android:id="@+id/change_password_confirm_et"
             android:layout_width="match_parent"
             android:layout_height="40dp"
             android:layout_margin="10dp"
-            android:hint="Confirm Password"
+            android:hint="Confirm new password *required"
             />
 
         <LinearLayout
@@ -57,6 +61,7 @@
                 >
 
                 <Button
+                    android:id="@+id/change_password_cancel_btn"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_centerInParent="true"
@@ -72,6 +77,7 @@
                 >
 
                 <Button
+                    android:id="@+id/change_password_change_btn"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_centerInParent="true"

+ 2 - 1
ApexDrivers/app/src/main/res/layout/home_order_cell.xml

@@ -17,7 +17,8 @@
             android:layout_alignParentRight="true"
             android:layout_marginRight="5dp"
             android:layout_marginTop="5dp"
-            android:visibility="gone"
+            android:scaleType="centerInside"
+            android:src="@drawable/backend_flag"
             />
 
         <TextView

+ 84 - 0
ApexDrivers/app/src/main/res/layout/message_item_cell.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        >
+
+        <RelativeLayout
+            android:id="@+id/message_title_container"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_alignParentRight="true"
+            android:gravity="center_vertical"
+            android:layout_marginTop="5dp"
+            android:layout_marginRight="5dp"
+            >
+
+            <ImageView
+                android:id="@+id/message_new_mark"
+                android:layout_width="15dp"
+                android:layout_height="15dp"
+                android:layout_marginTop="2dp"
+                android:layout_alignParentRight="true"
+                android:scaleType="centerInside"
+                android:src="@drawable/backend_flag"
+                />
+
+            <TextView
+                android:id="@+id/message_date_tv"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="5dp"
+                android:layout_toLeftOf="@id/message_new_mark"
+                android:textColor="#000000"
+                android:textSize="14sp"
+                android:text="09/17/2018"
+                />
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_toLeftOf="@id/message_date_tv"
+                android:gravity="center_vertical"
+                android:layout_marginTop="10dp"
+                android:layout_marginBottom="5dp"
+                android:layout_marginLeft="10dp"
+                android:layout_marginRight="5dp"
+                >
+
+                <TextView
+                    android:id="@+id/message_title_tv"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:textColor="#000000"
+                    android:textSize="17sp"
+                    android:textStyle="bold"
+                    android:text="New Order"
+                    />
+
+            </RelativeLayout>
+
+
+        </RelativeLayout>
+
+        <TextView
+            android:id="@+id/message_msg_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/message_title_container"
+            android:layout_marginLeft="10dp"
+            android:layout_marginBottom="10dp"
+            android:layout_marginRight="5dp"
+            android:textColor="#000000"
+            android:textSize="15sp"
+            android:text="you have a new order AFS201809170001200"
+            />
+
+
+    </RelativeLayout>
+
+</RelativeLayout>