Java tutorial
/* * Copyright 2013 Hari Krishna Dulipudi * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dev.dworks.apps.asecure; import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.inputmethod.EditorInfo; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import dev.dworks.apps.asecure.entity.SecureSIM; import dev.dworks.apps.asecure.entity.SecureSIM.SecureSIMColumns; import dev.dworks.apps.asecure.misc.Utils; import dev.dworks.libs.actionbarplus.app.ActionBarActivityPlus; import dev.dworks.libs.actionbarplus.widget.SwipeDismissTouchListener; public class MainActivity extends ActionBarActivityPlus implements OnClickListener { private static final String[] PROJECTION = { SecureSIMColumns._ID, SecureSIMColumns.NAME, SecureSIMColumns.SIM_NUMBER, SecureSIMColumns.MOBILE_NUMBER, SecureSIMColumns.CREATED_AT, }; private SharedPreferences mSharedPreferences = null; private TextView number; private TextView operator; private String operatorName; private String password; private ImageButton register; private Animation shake; private SIMQueryHandler simQueryHandler; private String simSerial; private Button dismiss; private View dismiss_content; private boolean showWelcome; @Override protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(R.layout.activity_main); mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); password = mSharedPreferences.getString("LoginPasswordPref", ""); showWelcome = mSharedPreferences.getBoolean("WelcomePref", true); if (paramBundle == null) { showLoginDialog(); } Fragment localFragment = Fragment.instantiate(this, SecureSIMListFragment.class.getName(), new Bundle()); getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, localFragment).commit(); initControls(); setNewData(); } private void initControls() { shake = AnimationUtils.loadAnimation(this, R.anim.shake); number = ((TextView) findViewById(R.id.number)); operator = ((TextView) findViewById(R.id.operator)); register = ((ImageButton) findViewById(R.id.register)); register.setOnClickListener(this); dismiss = ((Button) findViewById(R.id.dismiss)); dismiss_content = findViewById(R.id.dismiss_content); dismiss.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dismiss_content.setVisibility(View.GONE); mSharedPreferences.edit().putBoolean("WelcomePref", false).commit(); } }); dismiss_content.setVisibility(showWelcome ? View.VISIBLE : View.GONE); dismiss_content.setOnTouchListener(new SwipeDismissTouchListener(dismiss_content, null, new SwipeDismissTouchListener.DismissCallbacks() { @Override public void onDismiss(View view, Object token) { dismiss_content.setVisibility(View.GONE); mSharedPreferences.edit().putBoolean("WelcomePref", false).commit(); } @Override public boolean canDismiss(Object token) { return true; } })); } private void setNewData() { TelephonyManager localTelephonyManager = (TelephonyManager) getApplicationContext() .getSystemService(Activity.TELEPHONY_SERVICE); operatorName = localTelephonyManager.getSimOperatorName(); simSerial = localTelephonyManager.getSimSerialNumber(); if (TelephonyManager.SIM_STATE_READY == localTelephonyManager.getSimState()) { operator.setText(operatorName); number.setText(simSerial); simQueryHandler = new SIMQueryHandler(getContentResolver()); simQueryHandler.startQuery(0, null, SecureSIM.CONTENT_URI, PROJECTION, SecureSIMColumns.SIM_NUMBER + " = ? ", new String[] { simSerial }, null); } else { operator.setText("Unknown"); number.setText("-"); register.setImageResource(0); register.setOnClickListener(null); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_about: Intent aboutIntent = new Intent(getApplicationContext(), AboutActivity.class); startActivity(aboutIntent); break; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { setNewData(); super.onResume(); } @Override protected void onDestroy() { simQueryHandler.cancelOperation(0); super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.register: Intent i = new Intent(this, SIMAddEditActivity.class); i.setAction(Intent.ACTION_INSERT); Bundle bundle = new Bundle(); bundle.putString(Utils.BUNDLE_OPERATOR, operatorName); bundle.putString(Utils.BUNDLE_SIM_NUMBER, simSerial); i.putExtras(bundle); startActivity(i); break; } } @SuppressLint("HandlerLeak") private class SIMQueryHandler extends AsyncQueryHandler { public SIMQueryHandler(ContentResolver cr) { super(cr); } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { super.onQueryComplete(token, cookie, cursor); if (null != cursor) { if (cursor.moveToFirst()) { String operatorName = cursor.getString(cursor.getColumnIndex(SecureSIMColumns.NAME)); String simSerial = cursor.getString(cursor.getColumnIndex(SecureSIMColumns.SIM_NUMBER)); operator.setText(operatorName); number.setText(simSerial); register.setImageResource(R.drawable.ic_registered); register.setOnClickListener(null); register.setEnabled(false); } else { register.setOnClickListener(MainActivity.this); register.setImageResource(R.drawable.ic_add); register.setEnabled(true); } cursor.close(); } } } private void showLoginDialog() { final SharedPreferences.Editor editor = mSharedPreferences.edit(); final boolean passwordSet = !TextUtils.isEmpty(password); final String setPassword = password; LayoutInflater layoutInflater = LayoutInflater.from(this); final View loginView = layoutInflater.inflate(R.layout.dialog_login, null); TextView header = (TextView) loginView.findViewById(R.id.login_header); final EditText password = (EditText) loginView.findViewById(R.id.password); final EditText password_repeat = (EditText) loginView.findViewById(R.id.password_repeat); final Button login = (Button) loginView.findViewById(R.id.login_button); //Button cancel = (Button) loginView.findViewById(R.id.cancel_button); if (!passwordSet) { password_repeat.setVisibility(View.VISIBLE); header.setVisibility(View.VISIBLE); } else { password.setVisibility(View.GONE); password_repeat.setVisibility(View.VISIBLE); password_repeat.setHint(R.string.login_pwd); } header.setText(!passwordSet ? getString(R.string.login_message) : getString(R.string.msg_login)); final Dialog dialog = new Dialog(this, R.style.Theme_Asecure_DailogLogin); dialog.setContentView(loginView); dialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { finish(); } }); dialog.show(); password_repeat.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == R.id.login_button || actionId == EditorInfo.IME_NULL || actionId == EditorInfo.IME_ACTION_DONE) { login.performClick(); return true; } return false; } }); login.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (passwordSet) { final String passwordString = password_repeat.getText().toString(); if (TextUtils.isEmpty(passwordString) || passwordString.compareTo(setPassword) != 0) { password_repeat.startAnimation(shake); password_repeat.setError(getString(R.string.msg_wrong_password)); return; } } else { final String passwordString = password_repeat.getText().toString(); final String passwordRepeatString = password_repeat.getText().toString(); if (TextUtils.isEmpty(passwordString)) { password.startAnimation(shake); password.setError(getString(R.string.msg_pwd_empty)); return; } if (TextUtils.isEmpty(passwordRepeatString)) { password_repeat.startAnimation(shake); password_repeat.setError(getString(R.string.msg_pwd_empty)); return; } else if (passwordString.compareTo(passwordRepeatString) != 0) { password_repeat.startAnimation(shake); password_repeat.setError(getString(R.string.msg_pwd_dont_match)); return; } editor.putString("LoginPasswordPref", password.getText().toString()); editor.commit(); } dialog.dismiss(); } }); /* cancel.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { dialog.dismiss(); finish(); }});*/ } }