package info.papdt.express.helper.ui;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.ShareActionProvider;
import android.text.TextUtils;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import de.hdodenhof.circleimageview.CircleImageView;
import info.papdt.express.helper.R;
import info.papdt.express.helper.api.KuaiDi100Helper;
import info.papdt.express.helper.dao.ExpressDatabase;
import info.papdt.express.helper.support.Express;
import info.papdt.express.helper.support.ExpressResult;
public class DetailsActivity extends AbsActivity {
private LinearLayout mContentLayout;
private EditText mEditTextName;
private TextView tv_company, tv_mail_no, tv_status, tv_round_center;
private CircleImageView iv_round;
private ImageButton mButtonNumberVisible;
private int eid;
private Express express;
private ExpressResult cache;
private ExpressDatabase edb;
private String phoneNumber;
private boolean hasPhoneNumber = true;
private boolean isEditingTitle = false, isShowingTrueNumber = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
Intent intent = getIntent();
eid = intent.getIntExtra("id", 0);
try {
JSONObject obj = new JSONObject(intent.getStringExtra("data"));
express = new Express(obj.getString("companyCode"),
obj.getString("mailNumber"),
obj.getString("name"));
express.setData(obj.getString("cache"));
} catch (JSONException e) {
e.printStackTrace();
}
cache = express.getData();
edb = new ExpressDatabase(getApplicationContext());
new Thread() {
@Override
public void run() {
try {
edb.init();
edb.getExpress(eid).needPush = false;
edb.save();
} catch (Exception e) {
}
}
}.start();
int company_id = KuaiDi100Helper.CompanyInfo.findCompanyByCode(express.getCompanyCode());
if (company_id != -1) {
phoneNumber = KuaiDi100Helper.CompanyInfo.info.get(company_id).phone;
hasPhoneNumber = phoneNumber != null && phoneNumber != "null" && !TextUtils.isEmpty(phoneNumber);
}
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setTitle(express.getName());
setUpHeaderView();
setUpListView();
}
@Override
protected void setUpViews() {
mContentLayout = (LinearLayout) findViewById(R.id.content_list);
tv_company = (TextView) findViewById(R.id.tv_express_company);
tv_mail_no = (TextView) findViewById(R.id.tv_mail_no);
tv_status = (TextView) findViewById(R.id.tv_status);
tv_round_center = (TextView) findViewById(R.id.center_text);
iv_round = (CircleImageView) findViewById(R.id.iv_round);
mButtonNumberVisible = (ImageButton) findViewById(R.id.btn_number_visible);
try {
ViewCompat.setElevation(findViewById(R.id.headerView), getResources().getDimension(R.dimen.toolbar_elevation));
} catch (NullPointerException e) {
// Just ignore it.
}
mEditTextName = new EditText(mActionBar.getThemedContext());
ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL);
mActionBar.setCustomView(mEditTextName, lp);
mActionBar.setDisplayShowCustomEnabled(false);
mActionBar.setDisplayShowTitleEnabled(true);
mButtonNumberVisible.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleNumberShowing();
}
});
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
if (isEditingTitle) {
getMenuInflater().inflate(R.menu.details_menu_editing, menu);
} else {
getMenuInflater().inflate(R.menu.details_menu, menu);
menu.findItem(R.id.action_phone).setVisible(hasPhoneNumber);
final MenuItem shouldPushItem = menu.findItem(R.id.action_should_push);
new Thread() {
@Override
public void run() {
try {
edb.init();
final boolean b = edb.getExpress(eid).shouldPush;
runOnUiThread(new Runnable() {
@Override
public void run() {
shouldPushItem.setChecked(b);
}
});
} catch (Exception e) {
}
}
}.start();
try {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,
String.format(
getString(R.string.string_copy_format),
express.getName(),
express.getMailNumber(),
cache.expTextName
) + String.format(
getString(R.string.string_share_format),
getResources().getStringArray(R.array.status)[cache.getTrueStatus()],
cache.data.get(cache.data.size() - 1).get("context")
)
);
ShareActionProvider provider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.action_share));
provider.setShareIntent(intent);
} catch (Exception e) {
}
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_edit_done) {
isEditingTitle = false;
new Thread() {
@Override
public void run() {
edb.init();
edb.getExpress(eid).setName(mEditTextName.getText().toString().trim());
try {
edb.save();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mActionBar.setTitle(edb.getExpress(eid).getName());
setResult(MainActivity.RESULT_HAS_CHANGED);
}
});
}
}.start();
hideSoftKeyboard();
syncActionBarCustomView();
invalidateOptionsMenu();
return true;
}
if (id == R.id.action_edit) {
isEditingTitle = true;
mEditTextName.setText(mActionBar.getTitle());
syncActionBarCustomView();
invalidateOptionsMenu();
return true;
}
if (id == R.id.action_phone) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(intent);
return true;
}
if (id == R.id.action_copy) {
setClipboard(
String.format(
getString(R.string.string_copy_format),
express.getName(),
express.getMailNumber(),
cache.expTextName
)
);
Toast.makeText(
getApplicationContext(),
R.string.details_has_copied,
Toast.LENGTH_SHORT
).show();
return true;
}
if (id == R.id.action_should_push) {
express.shouldPush = !item.isChecked();
item.setChecked(!item.isChecked());
new Thread() {
@Override
public void run() {
try {
edb.init();
edb.getExpress(eid).shouldPush = express.shouldPush;
edb.save();
setResult(MainActivity.RESULT_HAS_CHANGED);
} catch (Exception e) {
}
}
}.start();
return true;
}
return super.onOptionsItemSelected(item);
}
private void toggleNumberShowing() {
isShowingTrueNumber = !isShowingTrueNumber;
if (isShowingTrueNumber) {
tv_mail_no.setText(express.getMailNumber());
mButtonNumberVisible.setImageResource(R.drawable.ic_visibility_white_24dp);
} else {
int length = tv_mail_no.length();
String str = "";
for (int i = 0; i < length; i++) str += "*";
tv_mail_no.setText(str);
mButtonNumberVisible.setImageResource(R.drawable.ic_visibility_off_white_24dp);
}
}
@Override
public void onBackPressed() {
if (isEditingTitle) {
isEditingTitle = false;
hideSoftKeyboard();
syncActionBarCustomView();
invalidateOptionsMenu();
} else {
scrollToFinishActivity();
}
}
private void hideSoftKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditTextName.getWindowToken(), 0);
}
private void syncActionBarCustomView() {
mActionBar.setDisplayShowCustomEnabled(isEditingTitle);
mActionBar.setDisplayShowTitleEnabled(!isEditingTitle);
}
private void addDetailsItem(String title, String info) {
View v = View.inflate(
new ContextThemeWrapper(
getApplicationContext(),
R.style.Base_Theme_AppCompat_Light
), R.layout.simple_list_item, null
);
((TextView) v.findViewById(android.R.id.text1)).setText(title);
((TextView) v.findViewById(android.R.id.text2)).setText(info);
v.setTag(title + ": " + info);
v.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
setClipboard((String) view.getTag());
Toast.makeText(
getApplicationContext(),
R.string.details_has_copied,
Toast.LENGTH_SHORT
).show();
return true;
}
});
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mContentLayout.addView(v, 0, lp);
}
private void setUpHeaderView() {
tv_status.setText(getResources().getStringArray(R.array.status)[cache.getTrueStatus()]);
try {
tv_company.setText(cache.expTextName);
tv_round_center.setText(cache.expTextName.substring(0, 1));
} catch (Exception e) {
}
tv_mail_no.setText(express.getMailNumber());
toggleNumberShowing();
ColorDrawable drawable = new ColorDrawable(getResources().getIntArray(R.array.statusColor) [cache.status]);
iv_round.setImageDrawable(drawable);
}
private void setUpListView() {
if (cache.errCode != 0){
addDetailsItem(getString(R.string.item_errorcode), getResources().getStringArray(R.array.errCode)[cache.errCode]);
addDetailsItem(getString(R.string.item_errormessage), cache.message);
}
for (int i = 0; i < cache.data.size(); i++){
addDetailsItem(cache.data.get(i).get("time"), cache.data.get(i).get("context"));
}
}
private void setClipboard(String text) {
ClipboardManager clipMan = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipMan.setPrimaryClip(ClipData.newPlainText(null, text));
}
}