package com.orisider.gdfs.ui.activity;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.ShareCompat;
import android.util.Log;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity;
import com.google.api.services.drive.model.File;
import com.orisider.gdfs.R;
import com.orisider.gdfs.model.AccessToken;
import com.orisider.gdfs.task.GetWebContentLinkTask;
import com.orisider.gdfs.ui.fragment.diag.LoadingFragment;
import com.orisider.gdfs.util.Constant;
import com.orisider.gdfs.util.SessionStore;
import com.orisider.gdfs.util.Util;
import roboguice.inject.InjectView;
public class GoogDriveOpen extends RoboSherlockFragmentActivity {
private static final String BUNDLE_KEY_INTENT = "intent";
/**
* Drive file ID key.
*/
private static final String EXTRA_FILE_ID = "resourceId";
private AccessToken token;
@InjectView(R.id.file_name)
private TextView fileName;
@InjectView(R.id.share_url)
private TextView shareUrl;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_drive_open);
ActionBar actionbar = getSupportActionBar();
actionbar.setDisplayHomeAsUpEnabled(true);
if (savedInstanceState == null) {
intent = getIntent();
} else {
intent = savedInstanceState.getParcelable(BUNDLE_KEY_INTENT);
}
handleIntent(intent);
}
private void handleIntent(Intent intent) {
// Make sure the Action is DRIVE_OPEN.
if (Constant.ACTION_DRIVE_OPEN.equals(intent.getAction())) {
processActionDriveOpen(intent);
} else if (Constant.ACTION_NOTI_OPEN.equals(intent.getAction())) {
processNotiOpen(intent);
} else {
//wrong access
finish();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void processNotiOpen(Intent intent) {
fileName.setText(intent.getStringExtra(Constant.BUNDLE_KEY_FILE_NAME));
shareUrl.setText(intent.getStringExtra(Constant.BUNDLE_KEY_FILE_SHARE_URL));
}
private void processActionDriveOpen(Intent intent) {
token = SessionStore.getAccountAuthToken();
if (token == null) {
startActivityForResult(new Intent(this, GetAccountActivity.class), Constant.REQ_CODE_ACNT);
} else {
processFile(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.a_drive_open, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.share:
Intent shareIntent = ShareCompat.IntentBuilder.from(GoogDriveOpen.this)
.setText(shareUrl.getText().toString())
.setType("text/plain")
.getIntent();
startActivity(shareIntent);
break;
case android.R.id.home:
startActivity(new Intent(getApplicationContext(), MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
break;
case R.id.copy_to_clipboard:
if (Util.hasHoneycomb()) {
ClipboardUtilPostHoneyComb.copy(getApplicationContext(), shareUrl.getText().toString());
} else {
ClipboardUtilPreHoneyComb.copy(getApplicationContext(), shareUrl.getText().toString());
}
break;
}
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constant.REQ_CODE_ACNT && resultCode == Activity.RESULT_OK) {
token = (AccessToken) data.getSerializableExtra(Constant.BUNDLE_KEY_ACCESS_TOKEN);
if (token != null) {
processFile(intent);
} else {
finish();
}
} else {
finish();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(BUNDLE_KEY_INTENT, intent);
}
private void processFile(Intent intent) {
new GetWebContentLinkTask(this, Util.newGDrive(token.accessToken), intent.getStringExtra(EXTRA_FILE_ID)) {
@Override
protected void onPreExecute() throws Exception {
new LoadingFragment().show(getSupportFragmentManager(), Constant.FRAG_TAG_DIALOG);
}
@Override
protected void onSuccess(File file) throws Exception {
dismissDialogFragment();
if (Log.isLoggable(Constant.LOG_TAG, Log.DEBUG)) {
Log.d(Constant.LOG_TAG, "title:" + file.getTitle());
Log.d(Constant.LOG_TAG, "download url:" + file.getDownloadUrl());
Log.d(Constant.LOG_TAG, "kind:" + file.getKind());
Log.d(Constant.LOG_TAG, "web content link:" + file.getWebContentLink());
}
fileName.setText(file.getTitle());
shareUrl.setText(file.getWebContentLink());
}
@Override
protected void onThrowable(Throwable t) throws RuntimeException {
dismissDialogFragment();
Util.showToast(R.string.toast_share_url_fail);
}
}.execute();
}
private void dismissDialogFragment() {
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(fm.findFragmentByTag(Constant.FRAG_TAG_DIALOG)).commit();
}
private static class ClipboardUtilPostHoneyComb {
public static void copy(Context ctx, String shareUrl) {
ClipboardManager mgr = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
mgr.setPrimaryClip(ClipData.newPlainText("goog_drive_file_url", shareUrl));
Util.showToast(R.string.url_copied_to_clipboard);
}
}
private static class ClipboardUtilPreHoneyComb {
public static void copy(Context ctx, String shareUrl) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) ctx
.getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard != null) {
clipboard.setText(shareUrl);
}
}
}
}