/*
* Copyright (c) 2011, 2012 Roberto Tyley
*
* This file is part of 'Agit' - an Android Git client.
*
* Agit is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Agit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/ .
*/
package com.madgag.agit;
import static android.text.Html.fromHtml;
import static android.widget.Toast.LENGTH_LONG;
import static com.madgag.agit.R.string.can_not_open_non_git_folder;
import static com.madgag.agit.R.string.install_file_manager;
import static com.madgag.agit.R.string.open_git_repository;
import static com.madgag.agit.RepositoryViewerActivity.manageRepoIntent;
import static com.madgag.agit.sync.AccountAuthenticatorService.addAccount;
import static com.madgag.android.ActionBarUtil.fixImageTilingOn;
import static com.madgag.android.HtmlStyleUtil.boldCode;
import static com.madgag.android.IntentUtil.isIntentAvailable;
import static com.madgag.android.jgit.HarmonyFixInflater.checkHarmoniousRepose;
import static org.eclipse.jgit.lib.RepositoryCache.FileKey.resolve;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.text.Spanned;
import android.util.Log;
import android.widget.Toast;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity;
import com.madgag.android.IntentUtil;
import com.madgag.android.util.store.InstallAppDialogFragment;
import java.io.File;
import org.eclipse.jgit.util.FS;
public class DashboardActivity extends RoboSherlockFragmentActivity {
private static final String TAG = "DashboardActivity";
public static final String PICK_DIRECTORY_INTENT = "org.openintents.action.PICK_DIRECTORY";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fixImageTilingOn(getSupportActionBar());
Log.i(TAG, "Inflater zero-byte inflation (HARMONY-6637/Android #11755) fixed: " + checkHarmoniousRepose());
try {
addAccount(this);
} catch (Exception e) {
Log.w(TAG, "Unable to add account for syncing", e);
}
setContentView(R.layout.dashboard_activity);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getSupportMenuInflater().inflate(R.menu.dashboard, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.clone:
startActivity(new Intent(this, CloneLauncherActivity.class));
return true;
case R.id.open_repo:
if (isIntentAvailable(this, PICK_DIRECTORY_INTENT)) {
Intent intent = new Intent(PICK_DIRECTORY_INTENT);
intent.putExtra("org.openintents.extra.TITLE", "Select Git repository...");
startActivityForResult(intent, 0);
} else {
askUserToInstallFileManager();
}
return true;
case R.id.about_app:
startActivity(new Intent(this, AboutActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
void askUserToInstallFileManager() {
// DialogFragment.show() will take care of adding the fragment
// in a transaction. We also want to remove any currently showing
// dialog, so make our own transaction and take care of that here.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
InstallAppDialogFragment.newInstance(R.drawable.icon, open_git_repository, install_file_manager,
"org.openintents.filemanager").show(ft, "dialog");
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
File repoDir = getFile(data.getData());
File gitdir = resolve(repoDir, FS.detect());
if (gitdir == null) {
Spanned messageHtml = fromHtml(getString(can_not_open_non_git_folder, boldCode(repoDir
.getAbsolutePath())));
Toast.makeText(this, messageHtml, LENGTH_LONG).show();
} else {
startActivity(manageRepoIntent(gitdir));
}
}
}
public static File getFile(Uri uri) {
if (uri != null) {
String filepath = uri.getPath();
if (filepath != null) {
return new File(filepath);
}
}
return null;
}
}