瀏覽代碼

Add change password feature -- 添加修改密码功能(resolve: #14355)
Hook backend interface -- 挂后台接口(issue50: #14335)

Ray Zhang 4 年之前
父節點
當前提交
bd9d2a76d3

+ 2 - 0
ApexDrivers/ratradefiling/src/main/AndroidManifest.xml

@@ -56,6 +56,8 @@
         <activity android:name=".fields.CustomizeFieldsActivity" />
         <activity android:name=".detail.NewDetailActivity" />
         <activity android:name=".my.CheckSavedActivity"/>
+        <activity android:name=".my.ChangePasswordActivity"/>
+
     </application>
 
 </manifest>

+ 5 - 5
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/TradeFilingApplication.java

@@ -546,11 +546,11 @@ public class TradeFilingApplication extends Application implements RAProviderHel
 	// m_user = user;
 	// }
 	//
-	// public static void put_password(String pass)
-	// {
-	//
-	// m_password = pass;
-	// }
+	 public static void put_password(String pass)
+	 {
+
+	 m_password = pass;
+	 }
 
 //	public static String get_sessionid()
 //	{

+ 39 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OfflineDataProvider.java

@@ -10,6 +10,45 @@ import org.json.JSONObject;
 import static com.usai.redant.rautils.utils.RAUtil.getJsonFromAsset;
 
 public class OfflineDataProvider {
+
+
+
+    public static JSONObject request_retrievepass()
+    {
+        JSONObject commObj = null;
+        try
+        {
+
+            String str="{\"result\":2}";
+            commObj = new JSONObject(str);
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+
+
+//        TradeFilingApplication.login(
+//                user, password,commObj);
+        return commObj;
+    }
+    public static JSONObject request_logout()
+    {
+        JSONObject commObj = null;
+        try
+        {
+
+            String str="{\"result\":2}";
+            commObj = new JSONObject(str);
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+
+
+//        TradeFilingApplication.login(
+//                user, password,commObj);
+        return commObj;
+    }
     public static JSONObject request_signup(String user, String password)
     {
         JSONObject commObj = null;

File diff suppressed because it is too large
+ 229 - 768
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/OnlineDataProvider.java


+ 34 - 1
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/dataprovider/RADataProvider.java

@@ -27,6 +27,27 @@ public class RADataProvider {
 //    public static final int		RESULT_UPDATE_USERAUTH_ERROR	= -11;
 //    public static final int		RESULT_SESSION_EXPIRED			= -13;
 //    public static final int		RESULT_VER_LOW					= -15;
+
+
+
+    public static JSONObject change_pass(String newpassword)
+    {
+        if(FAKE_DATA)
+        {
+            try
+            {
+                return new JSONObject("{\"result\":2}");
+            } catch (JSONException e)
+            {
+                e.printStackTrace();
+                return null;
+            }
+        }
+        else
+        {
+            return OnlineDataProvider.request_changepassword(newpassword);
+        }
+    }
     public static JSONObject retrieve_pass(String user, String email)
     {
 
@@ -43,7 +64,7 @@ public class RADataProvider {
         }
         else
         {
-            return OnlineDataProvider.retrieve_pass(user,email);
+            return OnlineDataProvider.request_retrievepass(user,email);
         }
 
     }
@@ -274,6 +295,18 @@ public class RADataProvider {
             return OnlineDataProvider.request_home();
         }
     }
+    public static JSONObject Logout()
+    {
+        if(FAKE_DATA)
+        {
+            return OfflineDataProvider.request_logout();
+        }
+        else
+        {
+            return OnlineDataProvider.request_logout();
+        }
+
+    }
     public static JSONObject Login(String user, String password)
     {
         if(FAKE_DATA)

+ 383 - 0
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/ChangePasswordActivity.java

@@ -0,0 +1,383 @@
+package com.usai.ratradefiling.my;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.usai.ratradefiling.R;
+import com.usai.ratradefiling.TradeFilingApplication;
+import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
+import com.usai.ratradefiling.dataprovider.RADataProvider;
+
+
+import org.json.JSONObject;
+
+/**
+ * Activity which displays a login screen to the user, offering registration as
+ * well.
+ */
+public class ChangePasswordActivity extends AppCompatActivity {
+	private UserLoginTask mAuthTask = null;
+
+	// Values for email and password at the time of the login attempt.
+	// private String m_sUser;
+	private String m_soldPassword;
+	private String m_snewPassword;
+	private String m_snew1Password;
+
+	// UI references.
+	private EditText mOldpassView;
+	private EditText mNewpassView;
+	private EditText mNew1passView;
+	private View mLoginFormView;
+	private View mLoginStatusView;
+	private TextView mLoginStatusMessageView;
+
+
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item)
+	{
+		Intent intent = new Intent();
+		switch (item.getItemId())
+		{
+			case android.R.id.home:
+				finish();
+				break;
+
+			default:
+				break;
+		}
+		return super.onOptionsItemSelected(item);
+	}
+
+	private void setCustomActionBar() {
+		ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
+		View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_customtitle, null);
+
+		TextView titleview = mActionBarView.findViewById(R.id.title);
+		titleview.setText(getTitle());
+
+		ActionBar actionBar = getSupportActionBar();
+		actionBar.setCustomView(mActionBarView, lp);
+//		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+//		actionBar.setDisplayShowCustomEnabled(true);
+		actionBar.setDisplayHomeAsUpEnabled(true);
+
+
+		actionBar.setDisplayShowTitleEnabled(true);
+	}
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		setContentView(R.layout.activity_change_password);
+
+		setCustomActionBar();
+
+		// Set up the login form.
+
+		mOldpassView = (EditText) findViewById(R.id.old_password);
+
+		mNewpassView = (EditText) findViewById(R.id.new_password);
+		mNew1passView = (EditText) findViewById(R.id.new_password_confirm);
+		mNew1passView
+		 .setOnEditorActionListener(new TextView.OnEditorActionListener() {
+		 @Override
+		 public boolean onEditorAction(TextView textView, int id,
+		 KeyEvent keyEvent) {
+		 if (id == R.id.btn_ok || id == EditorInfo.IME_ACTION_DONE) {
+			 
+			 
+			 InputMethodManager inputMethodManager = (InputMethodManager)getApplicationContext().getSystemService(
+						Context.INPUT_METHOD_SERVICE);
+
+		// EditText editText =
+		// (EditText)findViewById(R.id.xxxx);
+		inputMethodManager.hideSoftInputFromWindow(
+				mNew1passView.getWindowToken(), 0); // ����
+		 changepassword();
+		 return true;
+		 }
+		 return false;
+		 }
+		 });
+
+		mLoginFormView = findViewById(R.id.login_form);
+		mLoginStatusView = findViewById(R.id.login_status);
+		mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
+
+		findViewById(R.id.btn_ok).setOnClickListener(
+				new View.OnClickListener() {
+					@Override
+					public void onClick(View view) {
+						InputMethodManager inputMethodManager = (InputMethodManager)getApplicationContext().getSystemService(
+								Context.INPUT_METHOD_SERVICE);
+
+				// EditText editText =
+				// (EditText)findViewById(R.id.xxxx);
+				inputMethodManager.hideSoftInputFromWindow(
+						mNew1passView.getWindowToken(), 0); // ����
+						changepassword();
+					}
+				});
+		findViewById(R.id.btn_close).setOnClickListener(
+				new View.OnClickListener() {
+					@Override
+					public void onClick(View view) {
+						finish();
+					}
+				});
+	}
+
+	// @Override
+	// public boolean onCreateOptionsMenu(Menu menu) {
+	// super.onCreateOptionsMenu(menu);
+	// getMenuInflater().inflate(R.menu.change_password, menu);
+	// return true;
+	// }
+	//
+	// /**
+	// * Attempts to sign in or register the account specified by the login
+	// form.
+	// * If there are form errors (invalid email, missing fields, etc.), the
+	// * errors are presented and no actual login attempt is made.
+	// */
+	public void changepassword() {
+		if (mAuthTask != null) {
+			return;
+		}
+
+		// Reset errors.
+		mOldpassView.setError(null);
+		mNewpassView.setError(null);
+		mNew1passView.setError(null);
+
+		// Store values at the time of the login attempt.
+		m_soldPassword = mOldpassView.getText().toString();
+		m_snewPassword = mNewpassView.getText().toString();
+		m_snew1Password = mNew1passView.getText().toString();
+
+		boolean cancel = false;
+		View focusView = null;
+
+		// Check for a valid password.
+		if (TextUtils.isEmpty(m_soldPassword)) {
+			mOldpassView.setError(getString(R.string.error_field_required));
+			focusView = mOldpassView;
+			cancel = true;
+		} else if (TextUtils.isEmpty(m_snewPassword)) {
+			mNewpassView.setError(getString(R.string.error_field_required));
+			focusView = mNewpassView;
+			cancel = true;
+		} else if (TextUtils.isEmpty(m_snew1Password)) {
+			mNew1passView.setError(getString(R.string.error_field_required));
+			focusView = mNew1passView;
+			cancel = true;
+		} else if (m_snewPassword.equals(m_snew1Password)==false) {
+			mNew1passView.setError("New passwords not same");
+			focusView = mNew1passView;
+			cancel = true;
+		}else if (m_soldPassword.equals(TradeFilingApplication.get_pass())==false) {
+			mOldpassView.setError("Wrong password");
+			focusView = mNew1passView;
+			cancel = true;
+		}
+
+	
+
+		if (cancel) {
+			// There was an error; don't attempt login and focus the first
+			// form field with an error.
+			focusView.requestFocus();
+		} else {
+			// Show a progress spinner, and kick off a background task to
+			// perform the user login attempt.
+			mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
+			showProgress(true);
+			mAuthTask = new UserLoginTask();
+			mAuthTask.execute((Void) null);
+		}
+	}
+
+	/**
+	 * Shows the progress UI and hides the login form.
+	 */
+	@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
+	private void showProgress(final boolean show) {
+		// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
+		// for very easy animations. If available, use these APIs to fade-in
+		// the progress spinner.
+		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+			int shortAnimTime = getResources().getInteger(
+					android.R.integer.config_shortAnimTime);
+
+			mLoginStatusView.setVisibility(View.VISIBLE);
+			mLoginStatusView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 1 : 0)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginStatusView.setVisibility(show ? View.VISIBLE
+									: View.GONE);
+						}
+					});
+
+			mLoginFormView.setVisibility(View.VISIBLE);
+			mLoginFormView.animate().setDuration(shortAnimTime)
+					.alpha(show ? 0 : 1)
+					.setListener(new AnimatorListenerAdapter() {
+						@Override
+						public void onAnimationEnd(Animator animation) {
+							mLoginFormView.setVisibility(show ? View.GONE
+									: View.VISIBLE);
+						}
+					});
+		} else
+			{
+			// The ViewPropertyAnimator APIs are not available, so simply show
+			// and hide the relevant UI components.
+			mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
+			mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+		}
+	}
+
+	/**
+	 * Represents an asynchronous login/registration task used to authenticate
+	 * the user.
+	 */
+	public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
+		int errorcode;
+		JSONObject json;
+		@Override
+		protected Boolean doInBackground(Void... params) {
+			json = RADataProvider.change_pass( m_snewPassword);
+			errorcode = json.optInt("result");
+			if (errorcode == OnlineDataProvider.RESULT_TRUE)
+				return true;
+			else {
+				return false;
+			}
+		}
+
+		@Override
+		protected void onPostExecute(final Boolean success) {
+			Log.d("onPostExecute", "entry");
+			mAuthTask = null;
+			showProgress(false);
+			// if (netconnect == )
+			// {
+			//
+			// }
+
+			if (success) {
+				Builder builder = new Builder(ChangePasswordActivity.this);
+				builder.setMessage(getString(R.string.str_password_changed));
+
+				builder.setTitle(getString(R.string.str_change_success));
+
+				builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						dialog.dismiss();
+						TradeFilingApplication.put_password(m_snewPassword);
+//						ApexTrackingApplication.put_password(m_snewPassword);
+						setResult(Activity.RESULT_OK, null);
+						finish();
+					}
+				});
+
+
+				builder.create().show();
+
+			} else {
+				switch (errorcode) {
+				case OnlineDataProvider.RESULT_NET_NOTAVAILABLE: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_connection_none),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case OnlineDataProvider.RESULT_NET_ERROR: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_error), Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+				case OnlineDataProvider.RESULT_ERROR:
+				// case Network.RESULT_RESPONSE_NULL:
+				{
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_resulterror),
+							Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					return;
+				}
+
+				case OnlineDataProvider.RESULT_FAILED_WITH_MESSAGE: {
+					Builder builder = new Builder(ChangePasswordActivity.this);
+					builder.setMessage(json.optString("err_msg"));
+
+					builder.setTitle(getString(R.string.str_failed_to_changepassword));
+
+					builder.setPositiveButton(getString(android.R.string.ok), new OnClickListener() {
+
+						@Override
+						public void onClick(DialogInterface dialog, int which) {
+							dialog.dismiss();
+
+//							RetrievePasswordActivity.this.finish();
+						}
+					});
+					builder.create().show();
+
+					return;
+				}
+				default: {
+					Toast toast = Toast.makeText(getApplicationContext(),
+							getText(R.string.msg_net_resulterror) + ":"
+									+ errorcode, Toast.LENGTH_LONG);
+					toast.setGravity(Gravity.CENTER, 0, 0);
+					toast.show();
+					break;
+				}
+				}
+			}
+		}
+
+		@Override
+		protected void onCancelled() {
+			mAuthTask = null;
+			showProgress(false);
+		}
+	}
+}

+ 35 - 13
ApexDrivers/ratradefiling/src/main/java/com/usai/ratradefiling/my/MyFragment.java

@@ -3,10 +3,13 @@ package com.usai.ratradefiling.my;
 
 import android.app.Activity;
 import android.content.Intent;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.Gravity;
 import android.view.View;
 import android.widget.ListView;
+import android.widget.Toast;
 
 import androidx.fragment.app.Fragment;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
@@ -14,10 +17,18 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 //import com.usai.apex.ChangePasswordActivity;
 //import com.usai.apex.saved.CheckSavedActivity;
 import com.usai.ratradefiling.R;
+import com.usai.ratradefiling.TradeFilingApplication;
+import com.usai.ratradefiling.dataprovider.OnlineDataProvider;
+import com.usai.ratradefiling.dataprovider.RADataProvider;
 import com.usai.redant.rautils.list.StaticModelistFragment;
 
+import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
+import static com.usai.redant.rautils.utils.Network.RESULT_TRUE;
+
 /**
  * A simple {@link Fragment} subclass.
  */
@@ -28,6 +39,7 @@ public class MyFragment extends StaticModelistFragment
     private static final int	REQUEST_CHANGEPASSWORD_ACTIVITY	= 2;
 
 
+
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data)
     {
@@ -143,23 +155,33 @@ public class MyFragment extends StaticModelistFragment
         else if (title.equals("Change Password"))
         {
 
-            if(true)
-                throw new AssertionError("not impl");
-//            Intent intent = new Intent();
-//			intent.setClass(getActivity(), ChangePasswordActivity.class);
-//
-//			startActivityForResult(intent, REQUEST_CHANGEPASSWORD_ACTIVITY);
-//			return;
+
+            Intent intent = new Intent();
+			intent.setClass(getActivity(), ChangePasswordActivity.class);
+
+			startActivityForResult(intent, REQUEST_CHANGEPASSWORD_ACTIVITY);
+			return;
         }
         else if (title.equals("Logout"))
         {
 
-            String UNIQUE_STRING = "com.usai.apex.push.cancel";
-            Intent intent = new Intent(UNIQUE_STRING);
-            // intent.putExtra("key1", "value1");
-            // intent.putExtra("key2", "value2");
-            intent.setPackage( getActivity().getPackageName());
-            getActivity().sendBroadcast(intent);
+            new Thread(new Runnable() {
+                @Override
+                public void run()
+                {
+                    RADataProvider.Logout();
+                }
+            }).start();
+
+
+
+
+//            String UNIQUE_STRING = "com.usai.apex.push.cancel";
+//            Intent intent = new Intent(UNIQUE_STRING);
+//            // intent.putExtra("key1", "value1");
+//            // intent.putExtra("key2", "value2");
+//            intent.setPackage( getActivity().getPackageName());
+//            getActivity().sendBroadcast(intent);
             if(mCallBack!=null)
                 mCallBack.onLogout();
 

+ 115 - 0
ApexDrivers/ratradefiling/src/main/res/layout/activity_change_password.xml

@@ -0,0 +1,115 @@
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:context=".ChangePasswordActivity" >
+
+    <!-- Login progress -->
+
+    <LinearLayout
+        android:id="@+id/login_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:gravity="center_horizontal"
+        android:orientation="vertical"
+        android:visibility="gone" >
+
+        <ProgressBar
+            style="?android:attr/progressBarStyleLarge"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="8dp" />
+
+        <TextView
+            android:id="@+id/login_status_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="16dp"
+            android:text="Connecting..."
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
+
+    <!-- Login form -->
+
+    <ScrollView
+        android:id="@+id/login_form"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" >
+
+        <LinearLayout
+            style="@style/LoginFormContainer"
+            android:orientation="vertical" >
+
+            <EditText
+                android:id="@+id/old_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="Old password"
+                android:imeActionId="1024"
+                android:imeActionLabel="@string/action_change_password_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <EditText
+                android:id="@+id/new_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="New password"
+                android:imeActionId="1024"
+                android:imeActionLabel="@string/action_change_password_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <EditText
+                android:id="@+id/new_password_confirm"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="Confirm new password"
+                android:imeActionId="1024"
+                android:imeActionLabel="@string/action_change_password_short"
+                android:imeOptions="actionUnspecified"
+                android:inputType="textPassword"
+                android:maxLines="1"
+                android:singleLine="true"
+                android:text="" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" >
+
+                <Button
+                    android:id="@+id/btn_close"
+                    android:layout_width="fill_parent"
+                    android:layout_height="39dp"
+                    android:background="@drawable/btn_bg"
+                    android:layout_marginTop="16dp"
+                    android:layout_marginLeft="4dp"
+                    android:layout_marginRight="4dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Close" />
+
+                <Button
+                    android:id="@+id/btn_ok"
+                    android:layout_width="fill_parent"
+                    android:layout_height="39dp"
+                    android:background="@drawable/btn_bg"
+                    android:layout_marginTop="16dp"
+                    android:layout_marginLeft="4dp"
+                    android:layout_marginRight="4dp"
+                    android:layout_weight="1"
+                    android:paddingLeft="32dp"
+                    android:paddingRight="32dp"
+                    android:text="Ok" />
+
+            </LinearLayout>
+        </LinearLayout>
+    </ScrollView>
+
+</merge>

+ 1 - 1
ApexDrivers/ratradefiling/src/main/res/layout/fragment_company_select.xml

@@ -9,6 +9,6 @@
     <TextView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:text="@string/hello_blank_fragment" />
+        android:text="" />
 
 </FrameLayout>

+ 7 - 0
ApexDrivers/ratradefiling/src/main/res/values-zh/strings.xml

@@ -90,4 +90,11 @@
 
     <!--about-->
     <string name="about">about_en</string>
+
+
+    <!--my-->
+    <string name="str_password_changed">Password changed</string>
+    <string name="str_change_success">Success</string>
+    <string name="str_failed_to_changepassword">Failed to change password</string>
+    <string name="action_change_password_short">Change</string>
 </resources>

+ 6 - 2
ApexDrivers/ratradefiling/src/main/res/values/strings.xml

@@ -91,6 +91,10 @@
 
     <!--about-->
     <string name="about">about_en</string>
-    <!-- TODO: Remove or change this placeholder text -->
-    <string name="hello_blank_fragment">Hello blank fragment</string>
+
+    <!--my-->
+    <string name="str_password_changed">Password changed</string>
+    <string name="str_change_success">Success</string>
+    <string name="str_failed_to_changepassword">Failed to change password</string>
+    <string name="action_change_password_short">Change</string>
 </resources>

Some files were not shown because too many files changed in this diff