package ru.perm.trubnikov.gps2sms; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.EditText; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; import android.widget.TextView; import android.widget.Toast; public class SlideTabsActivity extends BaseActivity implements OnTabChangeListener, OnPageChangeListener { private final static int MYCOORDS_SAVE_POINT_DIALOG_ID = 20; private final static int MYCOORDS_ADD_POINT_DIALOG_ID = 15; protected final static int DIALOG_COORD_PROPS_ID = 5; private ViewPager mViewPager; private TabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { // Определение темы должно быть ДО super.onCreate и setContentView //setTheme(DBHelper.determineTheme(this)); super.onCreate(savedInstanceState); setContentView(R.layout.activity_slidetabs); mViewPager = (ViewPager) findViewById(R.id.viewpager); // Tab Initialization initialiseTabHost(); SlideTabsPagerAdapter mAdapter = new SlideTabsPagerAdapter(getSupportFragmentManager()); // Fragments and ViewPager Initialization mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(SlideTabsActivity.this); ShowBackButton(); } // Method to add a TabHost private static void AddTab(SlideTabsActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec) { tabSpec.setContent(new SlideTabsFactory(activity)); tabHost.addTab(tabSpec); } // Manages the Tab changes, synchronizing it with Pages public void onTabChanged(String tag) { int pos = this.mTabHost.getCurrentTab(); this.mViewPager.setCurrentItem(pos); } @Override public void onPageScrollStateChanged(int arg0) { } // Manages the Page changes, synchronizing it with Tabs @Override public void onPageScrolled(int arg0, float arg1, int arg2) { int pos = this.mViewPager.getCurrentItem(); this.mTabHost.setCurrentTab(pos); } @Override public void onPageSelected(int arg0) { } // Tabs Creation private void initialiseTabHost() { mTabHost = (TabHost) findViewById(android.R.id.tabhost); mTabHost.setup(); SlideTabsActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec(getString(R.string.tab_mycoords)).setIndicator(getString(R.string.tab_mycoords))); SlideTabsActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec(getString(R.string.tab_mysms)).setIndicator(getString(R.string.tab_mysms))); SlideTabsActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec(getString(R.string.tab_mysms_out)).setIndicator(getString(R.string.tab_mysms_out))); mTabHost.setOnTabChangedListener(this); } // --------------------------------------------------------------------------------------------- @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_COORD_PROPS_ID: return secondDialog(); case MYCOORDS_ADD_POINT_DIALOG_ID: return addPointDlg(); case MYCOORDS_SAVE_POINT_DIALOG_ID: return savePointDlg(); } return null; } // Update DialogData protected void onPrepareDialog(int id, Dialog dialog) { //AlertDialog aDialog = (AlertDialog) dialog; switch (id) { case DIALOG_COORD_PROPS_ID: try { EditText e1 = (EditText) dialog .findViewById(R.id.mycoords_name); e1.requestFocus(); DBHelper dbHelper = new DBHelper(SlideTabsActivity.this); RepoCoordsFragment fragment = (RepoCoordsFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, 0)); e1.setText(dbHelper.getMyccordName(fragment.actionCoordsId)); dbHelper.close(); e1.selectAll(); } catch (Exception e) { Log.d("gps", "EXCEPTION! " + e.toString() + " Message:" + e.getMessage()); } break; default: break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mycoords_actions, menu); return (super.onCreateOptionsMenu(menu)); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.action_add_coords: showDialog(MYCOORDS_ADD_POINT_DIALOG_ID); return true; default: return super.onOptionsItemSelected(item); } } // Dialog for adding new point protected AlertDialog addPointDlg() { LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.repo_addpoint, (ViewGroup) findViewById(R.id.repo_addpoint_dialog_layout)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(layout); final EditText pEdit = (EditText) layout.findViewById(R.id.point_name); final EditText laEdit = (EditText) layout.findViewById(R.id.point_la); final EditText loEdit = (EditText) layout.findViewById(R.id.point_lo); AdjustAddDialogColors(layout); builder.setPositiveButton(getString(R.string.save_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { String Coordinates = GpsHelper.extractCoordinates(laEdit.getText().toString() + "," + loEdit.getText().toString()); if (!Coordinates.equalsIgnoreCase("0,0")) { DBHelper dbHelper = new DBHelper(SlideTabsActivity.this); dbHelper.insertMyCoord(pEdit.getText().toString(), Coordinates); dbHelper.close(); } else { DBHelper.ShowToastT( SlideTabsActivity.this.getApplicationContext(), getString(R.string.add_point_error), Toast.LENGTH_SHORT); } mTabHost.setCurrentTab(0); RepoCoordsFragment fragment = (RepoCoordsFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, 0)); //fragment.refillMainScreen(); fragment.rebuildList(); pEdit.requestFocus(); pEdit.setText(""); laEdit.setText(""); loEdit.setText(""); } }); builder.setNegativeButton(getString(R.string.cancel_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { pEdit.requestFocus(); pEdit.setText(""); laEdit.setText(""); loEdit.setText(""); dialog.cancel(); } }); builder.setCancelable(true); AlertDialog dialog = builder.create(); // show keyboard automatically dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); return dialog; } // Dialog for rename & delete point protected AlertDialog secondDialog() { LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.repo_point_props_dialog, (ViewGroup) findViewById(R.id.repo_point_props_dialog_layout)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(layout); AdjustPropDialogColors(layout); final EditText nameEdit = (EditText) layout .findViewById(R.id.mycoords_name); builder.setPositiveButton(getString(R.string.save_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { RepoCoordsFragment fragment = (RepoCoordsFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, 0)); DBHelper dbHelper = new DBHelper(SlideTabsActivity.this); dbHelper.setMyccordName(fragment.actionCoordsId, nameEdit .getText().toString()); dbHelper.close(); fragment.rebuildList(); //fragment.refillMainScreen(); } }); builder.setNegativeButton(getString(R.string.del_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { RepoCoordsFragment fragment = (RepoCoordsFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, 0)); DBHelper dbHelper = new DBHelper(SlideTabsActivity.this); dbHelper.deleteMyccord(fragment.actionCoordsId); dbHelper.close(); //fragment.refillMainScreen(); fragment.rebuildList(); } }); builder.setNeutralButton(getString(R.string.cancel_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.setCancelable(true); AlertDialog dialog = builder.create(); // show keyboard automatically dialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); return dialog; } protected AlertDialog savePointDlg() { LayoutInflater inflater_sp = getLayoutInflater(); View layout_sp = inflater_sp.inflate(R.layout.repo_save_point_dialog, (ViewGroup) findViewById(R.id.repo_save_point_dialog_layout)); AlertDialog.Builder builder_sp = new AlertDialog.Builder(this); builder_sp.setView(layout_sp); final EditText lPointName = (EditText) layout_sp .findViewById(R.id.point_edit_text); builder_sp.setPositiveButton(getString(R.string.save_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //!!!!!!!!!!!! RepoFragmentSMSOut, судя по всему, нормально приводится к RepoSMSInFragmentNew RepoSMSInFragment fragment = (RepoSMSInFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, mViewPager.getCurrentItem())); DBHelper dbHelper = new DBHelper(SlideTabsActivity.this); dbHelper.insertMyCoord(lPointName.getText().toString(), fragment.actionCoords); dbHelper.close(); lPointName.setText(""); // Чистим DBHelper.ShowToast(SlideTabsActivity.this, R.string.point_saved, Toast.LENGTH_LONG); mTabHost.setCurrentTab(0); RepoCoordsFragment fragment0 = (RepoCoordsFragment) getSupportFragmentManager().findFragmentByTag(DBHelper.getFragmentTag(R.id.viewpager, 0)); //fragment0.refillMainScreen(); fragment0.rebuildList(); } }); builder_sp.setNegativeButton(getString(R.string.cancel_btn_txt), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { lPointName.setText(""); // Чистим dialog.cancel(); } }); builder_sp.setCancelable(true); AlertDialog dialog = builder_sp.create(); dialog.setTitle(getString(R.string.save_point_dlg_header)); // show keyboard automatically dialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); return dialog; } protected void AdjustAddDialogColors(View layout) { // Only for Android LOWER than 3.0 ! // Hack for lower Android versions to make text visible // Dialog background is DIFFERENT in Android 2.1 and Android 2.3 // That's why we use gray color everywhere for Android < 3.0 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { TextView tv1 = (TextView) layout.findViewById(R.id.textView1); TextView tv2 = (TextView) layout.findViewById(R.id.textView2); TextView tv3 = (TextView) layout.findViewById(R.id.textView3); EditText et1 = (EditText) layout.findViewById(R.id.point_name); EditText et2 = (EditText) layout.findViewById(R.id.point_la); EditText et3 = (EditText) layout.findViewById(R.id.point_lo); tv1.setTextColor(Color.parseColor("#9E9E9E")); tv2.setTextColor(Color.parseColor("#9E9E9E")); tv3.setTextColor(Color.parseColor("#9E9E9E")); et1.setTextColor(Color.parseColor("#9E9E9E")); et2.setTextColor(Color.parseColor("#9E9E9E")); et3.setTextColor(Color.parseColor("#9E9E9E")); et1.setHintTextColor(Color.parseColor("#9E9E9E")); et2.setHintTextColor(Color.parseColor("#9E9E9E")); et3.setHintTextColor(Color.parseColor("#9E9E9E")); } } protected void AdjustPropDialogColors(View layout) { // Only for Android LOWER than 3.0 ! // Hack for lower Android versions to make text visible // Dialog background is DIFFERENT in Android 2.1 and Android 2.3 // That's why we use gray color everywhere for Android < 3.0 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { EditText et1 = (EditText) layout.findViewById(R.id.mycoords_name); et1.setTextColor(Color.parseColor("#9E9E9E")); et1.setHintTextColor(Color.parseColor("#9E9E9E")); } } public void ShowBackButton() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } }