package org.sorz.lab.smallcloudemoji;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.Toast;
import com.sony.smallapp.SmallAppWindow;
import com.sony.smallapp.SmallApplication;
import org.sorz.lab.smallcloudemoji.activites.SettingsActivity;
import org.sorz.lab.smallcloudemoji.adapters.MainExpandableAdapter;
import org.sorz.lab.smallcloudemoji.db.DaoSession;
import org.sorz.lab.smallcloudemoji.db.DatabaseHelper;
import org.sorz.lab.smallcloudemoji.db.DatabaseUpgrader;
import org.sorz.lab.smallcloudemoji.db.Entry;
import org.sorz.lab.smallcloudemoji.db.EntryDao;
import org.sorz.lab.smallcloudemoji.db.Repository;
import org.sorz.lab.smallcloudemoji.db.RepositoryDao;
import org.sorz.lab.smallcloudemoji.tasks.DownloadAsyncTask;
import java.util.Date;
/**
* Small application for Sony.
*/
public class MainApplication extends SmallApplication {
private SharedPreferences sharedPreferences;
private MainExpandableAdapter adapter;
@Override
public void onCreate() {
super.onCreate();
setContentView(R.layout.application_main);
setTitle(R.string.app_name);
SmallAppWindow.Attributes attr = getWindow().getAttributes();
attr.minHeight = 350;
attr.minWidth = 350;
attr.width = 500;
attr.height = 650;
getWindow().setAttributes(attr);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
// Open database.
DatabaseHelper databaseHelper = DatabaseHelper.getInstance(this, true);
DaoSession daoSession = databaseHelper.getDaoSession();
EntryDao entryDao = daoSession.getEntryDao();
RepositoryDao repositoryDao = daoSession.getRepositoryDao();
DatabaseUpgrader.checkAndDoUpgrade(this, daoSession);
// Download if it's empty.
if (entryDao.queryBuilder().limit(1).count() == 0) {
Repository repository = repositoryDao.queryBuilder().limit(1).unique();
// Minimize the windows rather than mask the process dialog.
getWindow().setWindowState(SmallAppWindow.WindowState.MINIMIZED);
updateRepository(repository);
}
final ExpandableListView listView =
(ExpandableListView) findViewById(R.id.expandableListView);
// Add options button.
LayoutInflater inflater = LayoutInflater.from(this);
View bottom = inflater.inflate(R.layout.item_options, null);
Button button = (Button) bottom.findViewById(R.id.options_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainApplication.this, SettingsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
});
listView.addFooterView(bottom);
adapter = new MainExpandableAdapter(this, daoSession);
listView.setAdapter(adapter);
listView.expandGroup(0, false);
listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
Entry entry = adapter.getChild(groupPosition, childPosition);
ClipboardManager clipboard =
(ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("emoticon", entry.getEmoticon());
clipboard.setPrimaryClip(clipData);
Toast.makeText(MainApplication.this, R.string.toast_copied,
Toast.LENGTH_SHORT).show();
entry.setLastUsed(new Date());
entry.update();
String action = sharedPreferences.getString("action_after_copied", "MINIMIZE");
if (action.equals("MINIMIZE"))
getWindow().setWindowState(SmallAppWindow.WindowState.MINIMIZED);
else if (action.equals("CLOSE"))
finish();
return true;
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Entry entry = (Entry) view.getTag(R.id.entry);
if (entry == null)
return false;
entry.setStar(!entry.getStar());
entry.update();
adapter.notifyDataSetChanged();
return true;
}
});
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
DatabaseHelper.getInstance(this).close();
}
private void updateRepository(final Repository repository) {
new DownloadAsyncTask(this) {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainApplication.this);
progressDialog.setTitle(R.string.download_title);
progressDialog.setMessage(getString(R.string.download_message));
progressDialog.setMax(100);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
cancel(true);
}
});
progressDialog.show();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
progressDialog.dismiss();
repository.resetCategories();
adapter.notifyDataSetChanged(true);
getWindow().setWindowState(SmallAppWindow.WindowState.NORMAL);
}
@Override
protected void onCancelled(Integer result) {
super.onCancelled();
if (result == DownloadAsyncTask.RESULT_SUCCESS)
return;
progressDialog.dismiss();
}
}.execute(repository);
}
}