reorg
This commit is contained in:
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry kind="lib" path="libs/twitter4j-core-2.1.11.jar"/>
|
|
||||||
<classpathentry kind="lib" path="/LocationLib/lib/wpsapi.jar">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="javadoc_location" value="http://tcdevsvn1/ShyHookdocumentation"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="src" path="FacebookLib_src"/>
|
|
||||||
<classpathentry kind="src" path="LocationLib_src"/>
|
|
||||||
<classpathentry kind="src" path="ExceptionHandlerLib_src"/>
|
|
||||||
<classpathentry kind="output" path="bin"/>
|
|
||||||
</classpath>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!-- Generated by Code Pro -->
|
|
||||||
<entry-points
|
|
||||||
version="1">
|
|
||||||
<explicit-entry-points/>
|
|
||||||
<include-main
|
|
||||||
enabled="true"/>
|
|
||||||
<include-tests
|
|
||||||
enabled="false"/>
|
|
||||||
<include-xml
|
|
||||||
enabled="true"/>
|
|
||||||
</entry-points>
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>TravelPost</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
<linkedResources>
|
|
||||||
<link>
|
|
||||||
<name>ExceptionHandlerLib_src</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>_android_ExceptionHandlerLib_7d68b46a/src</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
|
||||||
<name>FacebookLib_src</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>_android_FacebookLib_9c84f9bf/src</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
|
||||||
<name>LocationLib_src</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>_android_LocationLib_84551a70/src</locationURI>
|
|
||||||
</link>
|
|
||||||
</linkedResources>
|
|
||||||
</projectDescription>
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.TwentyCodes.android.TravelPost" android:versionName="0.0.0" android:versionCode="5" android:installLocation="internalOnly">
|
|
||||||
|
|
||||||
<application android:icon="@drawable/icon" android:label="@string/app_name">
|
|
||||||
|
|
||||||
<activity android:label="@string/app_name"
|
|
||||||
android:configChanges="orientation" android:name="TravelPost">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<receiver android:name="LocationReceiver" android:exported="true"
|
|
||||||
android:enabled="true" android:process=":locationreceiver">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="TwentyCodes.TravelPost.intent.action.LocationUpdate" />
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
|
|
||||||
<receiver android:label="@string/app_name" android:name="TravelPostWidget">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
||||||
</intent-filter>
|
|
||||||
<meta-data android:name="android.appwidget.provider" android:resource="@xml/travelpostwidgetinfo"/>
|
|
||||||
</receiver>
|
|
||||||
|
|
||||||
<service android:process=":TravelPostLocationService" android:enabled="true" android:exported="true" android:name="com.TwentyCodes.android.location.LocationService"></service>
|
|
||||||
<activity android:name="WebAuth" android:configChanges="orientation"></activity>
|
|
||||||
<activity android:name="PostActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="7" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
|
|
||||||
</manifest>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
changed postToWall() to postWall() in FacebookAuth.java.
|
|
||||||
|
|
||||||
created method postToWall(). this method should post without user interaction
|
|
||||||
|
|
||||||
in FacebookAuth.java i splite the init() method into two. authorize() and logout().
|
|
||||||
|
|
||||||
created postToWallDialog() in FacebookAuth.java to display a dialog when posting to wall.
|
|
||||||
|
|
||||||
t seems the facebook sdk is not saving an access token when trying to make a direct facebook graph request.
|
|
||||||
it does save the access token when calling a dialog but prompts for credentials. i believe the authorization process is failing. not sure why. still researching.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
# This file is automatically generated by Android Tools.
|
|
||||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
|
||||||
#
|
|
||||||
# This file must be checked in Version Control Systems.
|
|
||||||
#
|
|
||||||
# To customize properties used by the Ant build system use,
|
|
||||||
# "build.properties", and override values to adapt the script to your
|
|
||||||
# project structure.
|
|
||||||
|
|
||||||
# Project target.
|
|
||||||
target=Google Inc.:Google APIs:9
|
|
||||||
proguard.config=proguard.cfg
|
|
||||||
android.library.reference.1=../FacebookLib/
|
|
||||||
|
|
||||||
android.library.reference.2=../LocationLib
|
|
||||||
android.library.reference.3=../ExceptionHandlerLib
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/* AUTO-GENERATED FILE. DO NOT MODIFY.
|
|
||||||
*
|
|
||||||
* This class was automatically generated by the
|
|
||||||
* aapt tool from the resource data it found. It
|
|
||||||
* should not be modified by hand.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
public final class R {
|
|
||||||
public static final class attr {
|
|
||||||
}
|
|
||||||
public static final class drawable {
|
|
||||||
public static final int facebook_icon=0x7f020000;
|
|
||||||
public static final int icon=0x7f020001;
|
|
||||||
public static final int logoidea3=0x7f020002;
|
|
||||||
public static final int sign_post_icon=0x7f020003;
|
|
||||||
public static final int sign_post_icon_mod=0x7f020004;
|
|
||||||
public static final int skyhook_logo=0x7f020005;
|
|
||||||
public static final int skyhook_logo_alpha=0x7f020006;
|
|
||||||
public static final int skyhook_logo_alpha_small=0x7f020007;
|
|
||||||
public static final int tc_logo_complete=0x7f020008;
|
|
||||||
public static final int user=0x7f020009;
|
|
||||||
public static final int widget=0x7f02000a;
|
|
||||||
}
|
|
||||||
public static final class id {
|
|
||||||
public static final int authCode=0x7f060007;
|
|
||||||
public static final int authOkButton=0x7f060006;
|
|
||||||
public static final int authWebView=0x7f060008;
|
|
||||||
public static final int post=0x7f060001;
|
|
||||||
public static final int postOkButton=0x7f060000;
|
|
||||||
public static final int skyhook_img=0x7f060002;
|
|
||||||
public static final int tc_img=0x7f060004;
|
|
||||||
public static final int text=0x7f060003;
|
|
||||||
public static final int widgetbutton=0x7f060005;
|
|
||||||
}
|
|
||||||
public static final class layout {
|
|
||||||
public static final int main=0x7f030000;
|
|
||||||
public static final int post=0x7f030001;
|
|
||||||
public static final int powered_by_skyhook=0x7f030002;
|
|
||||||
public static final int travelpostwidget=0x7f030003;
|
|
||||||
public static final int webauth=0x7f030004;
|
|
||||||
}
|
|
||||||
public static final class string {
|
|
||||||
public static final int about=0x7f050007;
|
|
||||||
public static final int app_name=0x7f050001;
|
|
||||||
public static final int fb_signin=0x7f050005;
|
|
||||||
public static final int gps_fix=0x7f050002;
|
|
||||||
public static final int hello=0x7f050000;
|
|
||||||
public static final int location_settings=0x7f050006;
|
|
||||||
public static final int post_hint=0x7f05000b;
|
|
||||||
public static final int post_settings=0x7f050008;
|
|
||||||
public static final int save_a_post=0x7f050009;
|
|
||||||
public static final int services=0x7f05000a;
|
|
||||||
public static final int sorry_theres_trouble=0x7f050003;
|
|
||||||
public static final int twitter_signin=0x7f050004;
|
|
||||||
}
|
|
||||||
public static final class xml {
|
|
||||||
public static final int settings=0x7f040000;
|
|
||||||
public static final int travelpostwidgetinfo=0x7f040001;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/* AUTO-GENERATED FILE. DO NOT MODIFY.
|
|
||||||
*
|
|
||||||
* This class was automatically generated by the
|
|
||||||
* aapt tool from the resource data it found. It
|
|
||||||
* should not be modified by hand.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.TwentyCodes.android.exception;
|
|
||||||
|
|
||||||
public final class R {
|
|
||||||
public static final class attr {
|
|
||||||
}
|
|
||||||
public static final class drawable {
|
|
||||||
public static final int facebook_icon=0x7f020000;
|
|
||||||
public static final int icon=0x7f020001;
|
|
||||||
public static final int logoidea3=0x7f020002;
|
|
||||||
public static final int sign_post_icon=0x7f020003;
|
|
||||||
public static final int sign_post_icon_mod=0x7f020004;
|
|
||||||
public static final int skyhook_logo=0x7f020005;
|
|
||||||
public static final int skyhook_logo_alpha=0x7f020006;
|
|
||||||
public static final int skyhook_logo_alpha_small=0x7f020007;
|
|
||||||
public static final int tc_logo_complete=0x7f020008;
|
|
||||||
public static final int user=0x7f020009;
|
|
||||||
public static final int widget=0x7f02000a;
|
|
||||||
}
|
|
||||||
public static final class id {
|
|
||||||
public static final int authCode=0x7f060007;
|
|
||||||
public static final int authOkButton=0x7f060006;
|
|
||||||
public static final int authWebView=0x7f060008;
|
|
||||||
public static final int post=0x7f060001;
|
|
||||||
public static final int postOkButton=0x7f060000;
|
|
||||||
public static final int skyhook_img=0x7f060002;
|
|
||||||
public static final int tc_img=0x7f060004;
|
|
||||||
public static final int text=0x7f060003;
|
|
||||||
public static final int widgetbutton=0x7f060005;
|
|
||||||
}
|
|
||||||
public static final class layout {
|
|
||||||
public static final int main=0x7f030000;
|
|
||||||
public static final int post=0x7f030001;
|
|
||||||
public static final int powered_by_skyhook=0x7f030002;
|
|
||||||
public static final int travelpostwidget=0x7f030003;
|
|
||||||
public static final int webauth=0x7f030004;
|
|
||||||
}
|
|
||||||
public static final class string {
|
|
||||||
public static final int about=0x7f050007;
|
|
||||||
public static final int app_name=0x7f050001;
|
|
||||||
public static final int fb_signin=0x7f050005;
|
|
||||||
public static final int gps_fix=0x7f050002;
|
|
||||||
public static final int hello=0x7f050000;
|
|
||||||
public static final int location_settings=0x7f050006;
|
|
||||||
public static final int post_hint=0x7f05000b;
|
|
||||||
public static final int post_settings=0x7f050008;
|
|
||||||
public static final int save_a_post=0x7f050009;
|
|
||||||
public static final int services=0x7f05000a;
|
|
||||||
public static final int sorry_theres_trouble=0x7f050003;
|
|
||||||
public static final int twitter_signin=0x7f050004;
|
|
||||||
}
|
|
||||||
public static final class xml {
|
|
||||||
public static final int settings=0x7f040000;
|
|
||||||
public static final int travelpostwidgetinfo=0x7f040001;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -1,34 +0,0 @@
|
|||||||
-optimizationpasses 5
|
|
||||||
-dontusemixedcaseclassnames
|
|
||||||
-dontskipnonpubliclibraryclasses
|
|
||||||
-dontpreverify
|
|
||||||
-verbose
|
|
||||||
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
|
|
||||||
|
|
||||||
-keep public class * extends android.app.Activity
|
|
||||||
-keep public class * extends android.app.Application
|
|
||||||
-keep public class * extends android.app.Service
|
|
||||||
-keep public class * extends android.content.BroadcastReceiver
|
|
||||||
-keep public class * extends android.content.ContentProvider
|
|
||||||
-keep public class com.android.vending.licensing.ILicensingService
|
|
||||||
|
|
||||||
-keepclasseswithmembernames class * {
|
|
||||||
native <methods>;
|
|
||||||
}
|
|
||||||
|
|
||||||
-keepclasseswithmembernames class * {
|
|
||||||
public <init>(android.content.Context, android.util.AttributeSet);
|
|
||||||
}
|
|
||||||
|
|
||||||
-keepclasseswithmembernames class * {
|
|
||||||
public <init>(android.content.Context, android.util.AttributeSet, int);
|
|
||||||
}
|
|
||||||
|
|
||||||
-keepclassmembers enum * {
|
|
||||||
public static **[] values();
|
|
||||||
public static ** valueOf(java.lang.String);
|
|
||||||
}
|
|
||||||
|
|
||||||
-keep class * implements android.os.Parcelable {
|
|
||||||
public static final android.os.Parcelable$Creator *;
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 8.5 KiB |
@@ -1,26 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent" android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
<RelativeLayout android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="#FFFFFF">
|
|
||||||
|
|
||||||
<Button android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@android:string/ok"
|
|
||||||
android:id="@+id/postOkButton"
|
|
||||||
android:layout_alignBottom="@+id/post"
|
|
||||||
android:layout_alignTop="@id/post"
|
|
||||||
android:layout_alignParentRight="true"></Button>
|
|
||||||
|
|
||||||
<EditText android:layout_toLeftOf="@id/postOkButton"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="@string/post_hint"
|
|
||||||
android:id="@id/post">
|
|
||||||
</EditText>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
>
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/widgetbutton"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:background="@drawable/widget"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
/>
|
|
||||||
</LinearLayout>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="fill_parent" android:layout_height="fill_parent">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Ok"
|
|
||||||
android:id="@+id/authOkButton"
|
|
||||||
android:layout_alignBottom="@+id/authCode"
|
|
||||||
android:layout_alignParentRight="true"></Button>
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:layout_toLeftOf="@id/authOkButton"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_alignParentBottom="true"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="Auth Code"
|
|
||||||
android:id="@+id/authCode">
|
|
||||||
</EditText>
|
|
||||||
|
|
||||||
<WebView
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="fill_parent"
|
|
||||||
android:layout_above="@id/authCode"
|
|
||||||
android:id="@+id/authWebView"
|
|
||||||
android:layout_alignParentTop="true">
|
|
||||||
</WebView>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="hello">Hello World!</string>
|
|
||||||
<string name="app_name">Travel Post</string>
|
|
||||||
<string name="twitter_signin">Twitter Sign In</string>
|
|
||||||
<string name="fb_signin">Facebook Sign In</string>
|
|
||||||
<string name="location_settings">Location Settings</string>
|
|
||||||
<string name="about">About</string>
|
|
||||||
<string name="post_settings">Post Settings</string>
|
|
||||||
<string name="save_a_post">Save a post</string>
|
|
||||||
<string name="services">Social Services</string>
|
|
||||||
<string name="post_hint">Whats up?</string>
|
|
||||||
</resources>
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<PreferenceScreen
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:title="@string/app_name">
|
|
||||||
<PreferenceCategory android:title="@string/post_settings">
|
|
||||||
<CheckBoxPreference android:title="@string/save_a_post" android:key="save_a_post"></CheckBoxPreference>
|
|
||||||
<EditTextPreference android:key="saved_post" android:title="Post" android:dependency="save_a_post"></EditTextPreference>
|
|
||||||
</PreferenceCategory><PreferenceCategory
|
|
||||||
android:title="@string/services">
|
|
||||||
<Preference
|
|
||||||
android:title="@string/twitter_signin"
|
|
||||||
android:key="twitter_sign_in"/>
|
|
||||||
<Preference
|
|
||||||
android:title="@string/fb_signin"
|
|
||||||
android:key="facebook_sign_in"/>
|
|
||||||
</PreferenceCategory>
|
|
||||||
<PreferenceCategory
|
|
||||||
android:title="@string/location_settings">
|
|
||||||
|
|
||||||
</PreferenceCategory><PreferenceCategory android:title="@string/about">
|
|
||||||
<com.TwentyCodes.android.TravelPost.TextViewPreference android:title="@string/hello"/>
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<appwidget-provider
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:minWidth="146dip"
|
|
||||||
android:minHeight="72dip"
|
|
||||||
android:updatePeriodMillis="10000"
|
|
||||||
android:initialLayout="@layout/travelpostwidget"/>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import com.facebook.android.DialogError;
|
|
||||||
import com.facebook.android.Facebook.DialogListener;
|
|
||||||
import com.facebook.android.FacebookError;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skeleton base class for RequestListeners, providing default error
|
|
||||||
* handling. Applications should handle these error conditions.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public abstract class BaseDialogListener implements DialogListener {
|
|
||||||
|
|
||||||
public void onFacebookError(FacebookError e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onError(DialogError e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCancel() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.facebook.android.AsyncFacebookRunner.RequestListener;
|
|
||||||
import com.facebook.android.FacebookError;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skeleton base class for RequestListeners, providing default error
|
|
||||||
* handling. Applications should handle these error conditions.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public abstract class BaseRequestListener implements RequestListener {
|
|
||||||
|
|
||||||
public void onFacebookError(FacebookError e, final Object state) {
|
|
||||||
Log.e("Facebook", e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onFileNotFoundException(FileNotFoundException e,
|
|
||||||
final Object state) {
|
|
||||||
Log.e("Facebook", e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onIOException(IOException e, final Object state) {
|
|
||||||
Log.e("Facebook", e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onMalformedURLException(MalformedURLException e,
|
|
||||||
final Object state) {
|
|
||||||
Log.e("Facebook", e.getMessage());
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,263 +0,0 @@
|
|||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.TwentyCodes.android.Facebook.SessionEvents.AuthListener;
|
|
||||||
import com.TwentyCodes.android.Facebook.SessionEvents.LogoutListener;
|
|
||||||
import com.facebook.android.AsyncFacebookRunner;
|
|
||||||
import com.facebook.android.DialogError;
|
|
||||||
import com.facebook.android.Facebook;
|
|
||||||
import com.facebook.android.Facebook.DialogListener;
|
|
||||||
import com.facebook.android.FacebookError;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class handles SSO for facebook.
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class FacebookAuth {
|
|
||||||
|
|
||||||
private static final String[] PERMISSIONS = new String[] {"publish_stream"};
|
|
||||||
/* Permissions that are prompted to the user for authorization */
|
|
||||||
private static final String APP_ID = "197267276952565";
|
|
||||||
/* This is the api key for the facebook application. See /FacebookLib/APIS.txt */
|
|
||||||
private static final String TAG = "FacebookAuth";
|
|
||||||
private Facebook mFb;
|
|
||||||
private AsyncFacebookRunner mAsyncRunner;
|
|
||||||
private Context mCtx;
|
|
||||||
private Activity mActivity;
|
|
||||||
private Handler mHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param Context - context to work in
|
|
||||||
* @param Activity - current displayed activity
|
|
||||||
*/
|
|
||||||
|
|
||||||
public FacebookAuth(Context context, Activity activity) {
|
|
||||||
mCtx = context;
|
|
||||||
mActivity = activity;
|
|
||||||
mHandler = new Handler();
|
|
||||||
mFb = new Facebook(APP_ID);
|
|
||||||
mAsyncRunner = new AsyncFacebookRunner(mFb);
|
|
||||||
SessionStore.restore(mFb, mCtx);
|
|
||||||
SessionEvents.addAuthListener(new FacebookAuthListener());
|
|
||||||
SessionEvents.addLogoutListener(new FacebookLogoutListener());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method initializes the authorization process.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void init() {
|
|
||||||
Log.i(TAG, "init()");
|
|
||||||
if (mFb.isSessionValid()) {
|
|
||||||
/*
|
|
||||||
*These lines log out you out of facebook. For now commented out.
|
|
||||||
*/
|
|
||||||
// SessionEvents.onLogoutBegin();
|
|
||||||
// mAsyncRunner.logout(mCtx, new LogoutRequestListener());
|
|
||||||
} else {
|
|
||||||
mFb.authorize(mActivity, PERMISSIONS, new LoginDialogListener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method authorizes the facebook account
|
|
||||||
* @author warren
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void authorize() throws NullPointerException {
|
|
||||||
if (!mFb.isSessionValid()) {
|
|
||||||
mFb.authorize(mActivity, PERMISSIONS, new LoginDialogListener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method starts the logout process
|
|
||||||
* @author warren
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void logout() {
|
|
||||||
if (mFb.isSessionValid()) {
|
|
||||||
SessionEvents.onLogoutBegin();
|
|
||||||
mAsyncRunner.logout(mCtx, new LogoutRequestListener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method posts a message to the users wall
|
|
||||||
* @author warren
|
|
||||||
* @param msg - message to post
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void postToWall(String msg) throws SessionNotValidException {
|
|
||||||
Log.d(TAG, "Testing graph API wall post");
|
|
||||||
if (mFb.isSessionValid()) {
|
|
||||||
try {
|
|
||||||
String response = mFb.request("me");
|
|
||||||
Bundle parameters = new Bundle();
|
|
||||||
parameters.putString("message", msg);
|
|
||||||
parameters.putString("description", "test test test");
|
|
||||||
response = mFb.request("me/feed", parameters, "POST");
|
|
||||||
Log.d(TAG, "got response: " + response);
|
|
||||||
if (response == null || response.equals("") || response.equals("false")) {
|
|
||||||
Log.v("Error", "Blank response");
|
|
||||||
}
|
|
||||||
} catch(Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (mFb.getAccessToken() == null) {
|
|
||||||
Log.i(TAG, "postToWall.access token is null");
|
|
||||||
}
|
|
||||||
throw new SessionNotValidException("This session is not valid");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows the user to post to their wall and input their own message
|
|
||||||
* @author warren
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void postToWallDialog() {
|
|
||||||
mFb.dialog(mCtx, "feed", new FacebookDialogListener());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles facebook authorization callbacks.
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
private class FacebookAuthListener implements AuthListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAuthSucceed() {
|
|
||||||
SessionStore.save(mFb, mCtx);
|
|
||||||
Log.i(TAG, "FacebookAuthListener.onAuthSucceed()");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAuthFail(String error) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles facebook logout callbacks
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
private class FacebookLogoutListener implements LogoutListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLogoutBegin() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLogoutFinish() {
|
|
||||||
SessionStore.clear(mCtx);
|
|
||||||
Log.i(TAG, "FacebookLogoutListener.logout succeeded");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles facebook login callbacks
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
private final class LoginDialogListener implements DialogListener {
|
|
||||||
public void onComplete(Bundle values) {
|
|
||||||
SessionEvents.onLoginSuccess();
|
|
||||||
Log.i(TAG, "LoginDialogListener.onComplete.login success");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onFacebookError(FacebookError error) {
|
|
||||||
SessionEvents.onLoginError(error.getMessage());
|
|
||||||
Log.e(TAG, "LoginDialogListener.error: " + error.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onError(DialogError error) {
|
|
||||||
SessionEvents.onLoginError(error.getMessage());
|
|
||||||
Log.e(TAG, "LoginDialogListener.error: " + error.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCancel() {
|
|
||||||
SessionEvents.onLoginError("Action Canceled");
|
|
||||||
Log.e(TAG, "LoginDialogListener.login cancelled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Listens for requests to log out.
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
private class LogoutRequestListener extends BaseRequestListener {
|
|
||||||
public void onComplete(String response, final Object state) {
|
|
||||||
// callback should be run in the original thread,
|
|
||||||
// not the background thread
|
|
||||||
mHandler.post(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
SessionEvents.onLogoutFinish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Listens for dialogs to post text to wall
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class FacebookDialogListener extends BaseDialogListener {
|
|
||||||
|
|
||||||
public void onComplete(Bundle values) {
|
|
||||||
final String postId = values.getString("post_id");
|
|
||||||
if (postId != null) {
|
|
||||||
Log.d("Facebook-Example", "Dialog Success! post_id=" + postId);
|
|
||||||
mAsyncRunner.request(postId, new WallPostRequestListener());
|
|
||||||
} else {
|
|
||||||
Log.d("Facebook-Example", "No wall post made");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Listens for posts to the wall
|
|
||||||
* @author warren
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class WallPostRequestListener extends BaseRequestListener {
|
|
||||||
|
|
||||||
public void onComplete(final String response, final Object state) {
|
|
||||||
Log.i(TAG, "WallPostRequestListener.post successful");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return true if the session is valid
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public boolean isSessionValid() {
|
|
||||||
return mFb.isSessionValid();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010 Facebook, Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
|
|
||||||
public class SessionEvents {
|
|
||||||
|
|
||||||
private static LinkedList<AuthListener> mAuthListeners =
|
|
||||||
new LinkedList<AuthListener>();
|
|
||||||
private static LinkedList<LogoutListener> mLogoutListeners =
|
|
||||||
new LinkedList<LogoutListener>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Associate the given listener with this Facebook object. The listener's
|
|
||||||
* callback interface will be invoked when authentication events occur.
|
|
||||||
*
|
|
||||||
* @param listener
|
|
||||||
* The callback object for notifying the application when auth
|
|
||||||
* events happen.
|
|
||||||
*/
|
|
||||||
public static void addAuthListener(AuthListener listener) {
|
|
||||||
mAuthListeners.add(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the given listener from the list of those that will be notified
|
|
||||||
* when authentication events occur.
|
|
||||||
*
|
|
||||||
* @param listener
|
|
||||||
* The callback object for notifying the application when auth
|
|
||||||
* events happen.
|
|
||||||
*/
|
|
||||||
public static void removeAuthListener(AuthListener listener) {
|
|
||||||
mAuthListeners.remove(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Associate the given listener with this Facebook object. The listener's
|
|
||||||
* callback interface will be invoked when logout occurs.
|
|
||||||
*
|
|
||||||
* @param listener
|
|
||||||
* The callback object for notifying the application when log out
|
|
||||||
* starts and finishes.
|
|
||||||
*/
|
|
||||||
public static void addLogoutListener(LogoutListener listener) {
|
|
||||||
mLogoutListeners.add(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the given listener from the list of those that will be notified
|
|
||||||
* when logout occurs.
|
|
||||||
*
|
|
||||||
* @param listener
|
|
||||||
* The callback object for notifying the application when log out
|
|
||||||
* starts and finishes.
|
|
||||||
*/
|
|
||||||
public static void removeLogoutListener(LogoutListener listener) {
|
|
||||||
mLogoutListeners.remove(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onLoginSuccess() {
|
|
||||||
for (AuthListener listener : mAuthListeners) {
|
|
||||||
listener.onAuthSucceed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onLoginError(String error) {
|
|
||||||
for (AuthListener listener : mAuthListeners) {
|
|
||||||
listener.onAuthFail(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onLogoutBegin() {
|
|
||||||
for (LogoutListener l : mLogoutListeners) {
|
|
||||||
l.onLogoutBegin();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onLogoutFinish() {
|
|
||||||
for (LogoutListener l : mLogoutListeners) {
|
|
||||||
l.onLogoutFinish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback interface for authorization events.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static interface AuthListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when a auth flow completes successfully and a valid OAuth
|
|
||||||
* Token was received.
|
|
||||||
*
|
|
||||||
* Executed by the thread that initiated the authentication.
|
|
||||||
*
|
|
||||||
* API requests can now be made.
|
|
||||||
*/
|
|
||||||
public void onAuthSucceed();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when a login completes unsuccessfully with an error.
|
|
||||||
*
|
|
||||||
* Executed by the thread that initiated the authentication.
|
|
||||||
*/
|
|
||||||
public void onAuthFail(String error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback interface for logout events.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static interface LogoutListener {
|
|
||||||
/**
|
|
||||||
* Called when logout begins, before session is invalidated.
|
|
||||||
* Last chance to make an API call.
|
|
||||||
*
|
|
||||||
* Executed by the thread that initiated the logout.
|
|
||||||
*/
|
|
||||||
public void onLogoutBegin();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the session information has been cleared.
|
|
||||||
* UI should be updated to reflect logged-out state.
|
|
||||||
*
|
|
||||||
* Executed by the thread that initiated the logout.
|
|
||||||
*/
|
|
||||||
public void onLogoutFinish();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import android.accounts.AccountsException;
|
|
||||||
|
|
||||||
public class SessionNotValidException extends AccountsException {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* generated id
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 624797017013181185L;
|
|
||||||
|
|
||||||
public SessionNotValidException(String message) {
|
|
||||||
new AccountsException(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010 Facebook, Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.TwentyCodes.android.Facebook;
|
|
||||||
|
|
||||||
import com.facebook.android.Facebook;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.Editor;
|
|
||||||
|
|
||||||
public class SessionStore {
|
|
||||||
|
|
||||||
private static final String TOKEN = "access_token";
|
|
||||||
private static final String EXPIRES = "expires_in";
|
|
||||||
private static final String KEY = "facebook-session";
|
|
||||||
|
|
||||||
public static boolean save(Facebook session, Context context) {
|
|
||||||
Editor editor =
|
|
||||||
context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
|
|
||||||
editor.putString(TOKEN, session.getAccessToken());
|
|
||||||
editor.putLong(EXPIRES, session.getAccessExpires());
|
|
||||||
return editor.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean restore(Facebook session, Context context) {
|
|
||||||
SharedPreferences savedSession =
|
|
||||||
context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
|
|
||||||
session.setAccessToken(savedSession.getString(TOKEN, null));
|
|
||||||
session.setAccessExpires(savedSession.getLong(EXPIRES, 0));
|
|
||||||
return session.isSessionValid();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void clear(Context context) {
|
|
||||||
Editor editor =
|
|
||||||
context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
|
|
||||||
editor.clear();
|
|
||||||
editor.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
/**
|
|
||||||
* LocationReceiver.java
|
|
||||||
* @date Jan 21, 2011
|
|
||||||
* @author ricky barrette
|
|
||||||
* @author Twenty Codes, LLC
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import com.TwentyCodes.android.Facebook.FacebookAuth;
|
|
||||||
import com.TwentyCodes.android.Facebook.SessionNotValidException;
|
|
||||||
import com.TwentyCodes.android.location.ReverseGeocoder;
|
|
||||||
|
|
||||||
import twitter4j.TwitterException;
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.location.Location;
|
|
||||||
import android.os.PowerManager;
|
|
||||||
import android.os.PowerManager.WakeLock;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The broadcast receiver that works with LocationService.java
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class LocationReceiver extends BroadcastReceiver{
|
|
||||||
|
|
||||||
public static final String ACTION_UPDATE = "TwentyCodes.TravelPost.intent.action.LocationUpdate";
|
|
||||||
public static final String LOCATION_PARCEL = "location_parcel";
|
|
||||||
private static final String TAG = "LocationReceiver";
|
|
||||||
private WakeLock mWakeLock;
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* acquires a wakelock to prevent the device's cpu from sleeping
|
|
||||||
* @param context
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
private void acquireWakeLock(Context context) {
|
|
||||||
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
|
||||||
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
|
|
||||||
mWakeLock.acquire();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when this receiver receives a location update
|
|
||||||
* @param location
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
private void onLocationUpdate(Location location) {
|
|
||||||
/*
|
|
||||||
* the following is used to load prefs from shared_prefs
|
|
||||||
*/
|
|
||||||
SharedPreferences settings = mContext.getSharedPreferences(TravelPost.SETTINGS, 0);
|
|
||||||
|
|
||||||
//check to see if save a post is enabled, if not use the post the user provide
|
|
||||||
if(settings.getBoolean(TravelPost.SAVE_A_POST, false))
|
|
||||||
postToSocialServices(settings.getString(TravelPost.SAVED_POST, null), location);
|
|
||||||
else {
|
|
||||||
postToSocialServices(settings.getString(TravelPost.USERS_POST, null), location);
|
|
||||||
settings.edit().remove(TravelPost.USERS_POST).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
removeWakeLock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* a convince method to post to social networks
|
|
||||||
* @param string
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
private void postToSocialServices(String post, Location location) {
|
|
||||||
Log.d(TravelPost.TAG, "Posting: "+ post);
|
|
||||||
|
|
||||||
//generate the post
|
|
||||||
String thePost = ReverseGeocoder.getAddressFromLocation(location) +" : "+ post;
|
|
||||||
|
|
||||||
// TODO check post size, is it greater than 140 chars?
|
|
||||||
|
|
||||||
// TODO Add more social services
|
|
||||||
|
|
||||||
//post to twitter
|
|
||||||
try {
|
|
||||||
Log.d(TravelPost.TAG, TwitterServices.tweet(mContext, thePost).toString());
|
|
||||||
} catch (TwitterException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
//if there is a facebook authization, then post!
|
|
||||||
if (mContext.getSharedPreferences("facebook-session", 0).getString("access_token", null) != null) {
|
|
||||||
//post to facebook
|
|
||||||
FacebookAuth fbAuth = new FacebookAuth(mContext, new Activity());
|
|
||||||
fbAuth.authorize();
|
|
||||||
try {
|
|
||||||
fbAuth.postToWall(thePost);
|
|
||||||
} catch (SessionNotValidException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when there is a location update from the location service.
|
|
||||||
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
mContext = context;
|
|
||||||
acquireWakeLock(context);
|
|
||||||
if(intent.getParcelableExtra(LOCATION_PARCEL) != null){
|
|
||||||
Location location = intent.getParcelableExtra(LOCATION_PARCEL);
|
|
||||||
onLocationUpdate(location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* removes the wake lock if there is one held
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
private void removeWakeLock() {
|
|
||||||
if(mWakeLock.isHeld())
|
|
||||||
mWakeLock.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
/**
|
|
||||||
* PostActivity.java
|
|
||||||
* @date Feb 5, 2011
|
|
||||||
* @author ricky barrette
|
|
||||||
* @author Twenty Codes, LLC
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import com.TwentyCodes.android.location.LocationService;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.widget.EditText;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is going to be the activity that is displayed when the travel post widget is clicked.
|
|
||||||
* This genreal feel of this activity is going to be similar to the google search widget activity
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class PostActivity extends Activity implements OnClickListener {
|
|
||||||
|
|
||||||
private EditText mPostEditText;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the activity is first created
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.app.Activity#onCreate(android.os.Bundle)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState){
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
this.setContentView(R.layout.post);
|
|
||||||
findViewById(R.id.postOkButton).setOnClickListener(this);
|
|
||||||
mPostEditText = (EditText) findViewById(R.id.post);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the ok button is pressed
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
//store post information to shared_prefs
|
|
||||||
this.getSharedPreferences(TravelPost.SETTINGS, 0).edit().putString(TravelPost.USERS_POST, mPostEditText.getText().toString()).commit();
|
|
||||||
//start the service
|
|
||||||
this.startService(LocationService.getStartServiceIntent(this, LocationReceiver.ACTION_UPDATE));
|
|
||||||
//exit the activity
|
|
||||||
this.finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/**
|
|
||||||
* @author Twenty Codes
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* this class will be a simple TextView to be used in a preference activity. you set the text using the set title tag
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class TextViewPreference extends Preference {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* creates a preference that is nothing but a text view
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
public TextViewPreference(Context context) {
|
|
||||||
super(context);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* creates a preference that is nothing but a text view
|
|
||||||
* @param context
|
|
||||||
* @param attrs
|
|
||||||
*/
|
|
||||||
public TextViewPreference(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* creates a preference that is nothing but a text view
|
|
||||||
* @param context
|
|
||||||
* @param attrs
|
|
||||||
* @param defStyle
|
|
||||||
*/
|
|
||||||
public TextViewPreference(Context context, AttributeSet attrs, int defStyle) {
|
|
||||||
super(context, attrs, defStyle);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* creates a linear layout the contains only a textview.
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.preference.Preference#onCreateView(android.view.ViewGroup)
|
|
||||||
* @param parent
|
|
||||||
* @return
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected View onCreateView(ViewGroup parent){
|
|
||||||
|
|
||||||
/*
|
|
||||||
* create a vertical linear layout that width and height that wraps content
|
|
||||||
*/
|
|
||||||
LinearLayout layout = new LinearLayout(getContext());
|
|
||||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
||||||
params.gravity = Gravity.CENTER;
|
|
||||||
layout.setPadding(15, 5, 10, 5);
|
|
||||||
layout.setOrientation(LinearLayout.VERTICAL);
|
|
||||||
|
|
||||||
layout.removeAllViews();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* create a textview that will be used to display the title provided in xml
|
|
||||||
* and add it to the lay out
|
|
||||||
*/
|
|
||||||
TextView title = new TextView(getContext());
|
|
||||||
title.setText(getTitle());
|
|
||||||
title.setTextSize(16);
|
|
||||||
title.setTypeface(Typeface.SANS_SERIF);
|
|
||||||
title.setGravity(Gravity.LEFT);
|
|
||||||
title.setLayoutParams(params);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* add the title and the time picker views to the layout
|
|
||||||
*/
|
|
||||||
layout.addView(title);
|
|
||||||
layout.setId(android.R.id.widget_frame);
|
|
||||||
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
/**
|
|
||||||
* TravelPost.java
|
|
||||||
* @date Jan 21, 2011
|
|
||||||
* @author ricky barrette
|
|
||||||
* @author Twenty Codes, LLC
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import twitter4j.TwitterException;
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.appwidget.AppWidgetManager;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
|
||||||
import android.preference.PreferenceActivity;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.widget.RemoteViews;
|
|
||||||
|
|
||||||
import com.TwentyCodes.android.Facebook.FacebookAuth;
|
|
||||||
import com.TwentyCodes.android.exception.ExceptionHandler;
|
|
||||||
import com.TwentyCodes.android.location.LocationService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Main activity for the Travel Post widget.
|
|
||||||
* This activity will be used to gather and store the users settings for the widget using shared_prefs
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class TravelPost extends PreferenceActivity implements OnPreferenceClickListener {
|
|
||||||
|
|
||||||
private ExceptionHandler mExceptionReport = new ExceptionHandler(this);
|
|
||||||
private TwitterServices mTwitterServices = null;
|
|
||||||
public static final String SETTINGS = "settings";
|
|
||||||
private static final int TWITTER_AUTH_REQUEST_CODE = 0;
|
|
||||||
public static final String TAG = "TravelPost";
|
|
||||||
public static final String SAVED_POST = "saved_post";
|
|
||||||
public static final String SAVE_A_POST = "save_a_post";
|
|
||||||
public static final String USERS_POST = "users_post";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the web auth activity returns its result
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.preference.PreferenceActivity#onActivityResult(int, int, android.content.Intent)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
Log.v(TAG, "onActivityResult()");
|
|
||||||
Log.d(TAG, "Request code:"+ requestCode);
|
|
||||||
String authCode = null;
|
|
||||||
if(data != null){
|
|
||||||
authCode = data.getStringExtra(WebAuth.AUTH_CODE);
|
|
||||||
if (authCode != null) {
|
|
||||||
Log.d(TAG, authCode);
|
|
||||||
} else {
|
|
||||||
Log.d(TAG, "onActivityForResult.authCode is null");
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
Log.e(TAG, "WebAuth result was null!!!");
|
|
||||||
|
|
||||||
if(resultCode == Activity.RESULT_OK)
|
|
||||||
switch(requestCode){
|
|
||||||
case TWITTER_AUTH_REQUEST_CODE:
|
|
||||||
try {
|
|
||||||
mTwitterServices.saveAuthorizationTokens(authCode);
|
|
||||||
} catch (TwitterException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the activity is first created
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.preference.PreferenceActivity#onCreate(android.os.Bundle)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
Log.v(TAG, "onCreate()");
|
|
||||||
|
|
||||||
//set this preference activity to use the settings file we choose.
|
|
||||||
this.getPreferenceManager().setSharedPreferencesName(SETTINGS);
|
|
||||||
|
|
||||||
//start the exception handler
|
|
||||||
mExceptionReport.run();
|
|
||||||
Thread.setDefaultUncaughtExceptionHandler(mExceptionReport);
|
|
||||||
|
|
||||||
// load preferences xml
|
|
||||||
this.addPreferencesFromResource(R.xml.settings);
|
|
||||||
|
|
||||||
this.findPreference("twitter_sign_in").setOnPreferenceClickListener(this);
|
|
||||||
this.findPreference("facebook_sign_in").setOnPreferenceClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy(){
|
|
||||||
Log.v(TAG, "onDestroy()");
|
|
||||||
updateWidget();
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
|
|
||||||
if (preference.getKey().equals("twitter_sign_in")) {
|
|
||||||
mTwitterServices = new TwitterServices(this);
|
|
||||||
try {
|
|
||||||
this.startActivityForResult(new Intent(this, WebAuth.class).putExtra(WebAuth.AUTH_URL, mTwitterServices.getAuthorizationURL()), TWITTER_AUTH_REQUEST_CODE);
|
|
||||||
} catch (TwitterException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else if (preference.getKey().equals("facebook_sign_in")) {
|
|
||||||
/*
|
|
||||||
* force facebook to re-check login info,
|
|
||||||
* if the last account information is valid, then fb does not ask for users info
|
|
||||||
*/
|
|
||||||
getSharedPreferences("facebook-session", 0).edit().clear().commit();
|
|
||||||
FacebookAuth fbAuth = new FacebookAuth(this, this);
|
|
||||||
fbAuth.authorize();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* updates the widget
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
private void updateWidget(){
|
|
||||||
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
|
|
||||||
ComponentName thisWidget = new ComponentName(this, TravelPostWidget.class);
|
|
||||||
PendingIntent pendingIntent;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if the save a post option is enabled then go start the service,
|
|
||||||
* else get the users input
|
|
||||||
*/
|
|
||||||
if( this.getSharedPreferences(SETTINGS, 0).getBoolean(TravelPost.SAVE_A_POST, false)){
|
|
||||||
//Create a pending intent to start the location service
|
|
||||||
pendingIntent = PendingIntent.getService(this, 0, LocationService.getStartServiceIntent(this, LocationReceiver.ACTION_UPDATE), 0);
|
|
||||||
} else {
|
|
||||||
//create a pending intent to start the post activity
|
|
||||||
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, PostActivity.class), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the layout for the App Widget and attach an on-click listener to the button
|
|
||||||
RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.travelpostwidget);
|
|
||||||
views.setOnClickPendingIntent(R.id.widgetbutton, pendingIntent);
|
|
||||||
|
|
||||||
//send the update to the widget
|
|
||||||
appWidgetManager.updateAppWidget(thisWidget, views);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
/**
|
|
||||||
* TravelPostWidget.java
|
|
||||||
* @date Jan, 15, 2011
|
|
||||||
* @author warren powers
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.appwidget.AppWidgetManager;
|
|
||||||
import android.appwidget.AppWidgetProvider;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.widget.RemoteViews;
|
|
||||||
|
|
||||||
import com.TwentyCodes.android.location.LocationService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class will display the widget on the android screen and handle user interaction
|
|
||||||
* @author warren
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class TravelPostWidget extends AppWidgetProvider {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set to true when the application is being debugged.
|
|
||||||
*/
|
|
||||||
private static final boolean DEBUG = true;
|
|
||||||
public final String TAG = "TravelPostWidget";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called in response to the ACTION_APPWIDGET_UPDATE broadcast when this AppWidget provider is being asked to provide RemoteViews for a set of AppWidgets.
|
|
||||||
* Override this method to implement your own AppWidget functionality.
|
|
||||||
* @see android.appwidget.AppWidgetProvider#onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[])
|
|
||||||
* @param context
|
|
||||||
* @param appWidgetManager
|
|
||||||
* @param appWidgetIds
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
|
|
||||||
if(DEBUG)
|
|
||||||
Log.v(TAG, "onUpdate()");
|
|
||||||
final int N = appWidgetIds.length;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* the following is used to load widget prefs from shared_prefs
|
|
||||||
*/
|
|
||||||
SharedPreferences settings = context.getSharedPreferences(TravelPost.SETTINGS, 0);
|
|
||||||
|
|
||||||
// Perform this loop procedure for each App Widget that belongs to this provider
|
|
||||||
for (int i=0; i<N; i++) {
|
|
||||||
int appWidgetId = appWidgetIds[i];
|
|
||||||
|
|
||||||
PendingIntent pendingIntent;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if the save a post option is enabled then go start the service,
|
|
||||||
* else get the users input
|
|
||||||
*/
|
|
||||||
if( settings.getBoolean(TravelPost.SAVE_A_POST, false)){
|
|
||||||
//Create a pending intent to start the location service
|
|
||||||
pendingIntent = PendingIntent.getService(context, 0, LocationService.getStartServiceIntent(context, LocationReceiver.ACTION_UPDATE), 0);
|
|
||||||
} else {
|
|
||||||
//create a pending intent to start the post activity
|
|
||||||
pendingIntent = PendingIntent.getActivity(context, 0, new Intent(context, PostActivity.class), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the layout for the App Widget and attach an on-click listener to the button
|
|
||||||
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.travelpostwidget);
|
|
||||||
views.setOnClickPendingIntent(R.id.widgetbutton, pendingIntent);
|
|
||||||
|
|
||||||
// Tell the AppWidgetManager to perform an update on the current App Widget
|
|
||||||
appWidgetManager.updateAppWidget(appWidgetId, views);
|
|
||||||
}
|
|
||||||
super.onUpdate(context, appWidgetManager, appWidgetIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements onReceive(Context, Intent) to dispatch calls to the various other methods on AppWidgetProvider.
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.appwidget.AppWidgetProvider#onReceive(android.content.Context, android.content.Intent)
|
|
||||||
* @param context
|
|
||||||
* @param intent received
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
if(DEBUG)
|
|
||||||
Log.v(TAG, "onReceive");
|
|
||||||
// v1.5 fix that doesn't call onDelete Action
|
|
||||||
final String action = intent.getAction();
|
|
||||||
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
|
|
||||||
final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
|
|
||||||
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
|
|
||||||
this.onDeleted(context, new int[] { appWidgetId });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.onReceive(context, intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called in response to the ACTION_APPWIDGET_DELETED broadcast when one or more AppWidget instances have been deleted.
|
|
||||||
* Override this method to implement your own AppWidget functionality.
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.appwidget.AppWidgetProvider#onDeleted(android.content.Context, int[])
|
|
||||||
* @param context
|
|
||||||
* @param appWidgetIds
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onDeleted(Context context, int[] appWidgetIds) {
|
|
||||||
if(DEBUG)
|
|
||||||
Log.v(TAG, "onDelete()");
|
|
||||||
super.onDeleted(context, appWidgetIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
/**
|
|
||||||
* TwitterServices.java
|
|
||||||
* @date Jan 30, 2011
|
|
||||||
* @author ricky barrette
|
|
||||||
* @author Twenty Codes, LLC
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import twitter4j.Status;
|
|
||||||
import twitter4j.Twitter;
|
|
||||||
import twitter4j.TwitterException;
|
|
||||||
import twitter4j.TwitterFactory;
|
|
||||||
import twitter4j.conf.ConfigurationBuilder;
|
|
||||||
import twitter4j.http.AccessToken;
|
|
||||||
import twitter4j.http.RequestToken;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.Editor;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A convince class for working with the twitter4j API
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class TwitterServices {
|
|
||||||
|
|
||||||
public static final String TWITTER_AUTH_TOKEN = "twitter_token";
|
|
||||||
public static final String TWITTER_AUTH_SECRET = "twitter_secret";
|
|
||||||
// private static final String TC_TEST_OAUTH_KEY = "CFYYGtuYjEHmwycZIhYS3Q";
|
|
||||||
// private static final String TC_TEST_OAUTH_SECRET = "Sf8nUTImllxET4SYriQ6e4YOLK4i8UUmO3x0tcPqhU";
|
|
||||||
private static final String TRAVEL_PORT_OAUTH_KEY = "NkSaLHkkpwMYnXryEKEA";
|
|
||||||
private static final String TRAVEL_PORT_OAUTH_SECRET = "imbqMfZs1nFxxMCtsRLrS3xWm1VOi5uZ3IuOv9iYk";
|
|
||||||
private Twitter twitter;
|
|
||||||
private static SharedPreferences shared_prefs;
|
|
||||||
private RequestToken requestToken;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Posts a tweet to twitter. <p>
|
|
||||||
* You need to authorize your application first
|
|
||||||
* @param msg
|
|
||||||
* @throws TwitterException
|
|
||||||
* @author ricky barrette
|
|
||||||
* @return Status
|
|
||||||
*/
|
|
||||||
public static Status tweet(Context context, String msg) throws TwitterException{
|
|
||||||
shared_prefs = context.getSharedPreferences(TravelPost.SETTINGS, 0);
|
|
||||||
Log.d(TravelPost.TAG, "Tweeting: "+ msg);
|
|
||||||
ConfigurationBuilder cb = new ConfigurationBuilder();
|
|
||||||
cb.setDebugEnabled(true);
|
|
||||||
cb.setOAuthConsumerKey(TRAVEL_PORT_OAUTH_KEY);
|
|
||||||
cb.setOAuthConsumerSecret(TRAVEL_PORT_OAUTH_SECRET);
|
|
||||||
cb.setOAuthAccessToken(shared_prefs.getString(TWITTER_AUTH_TOKEN, ""));
|
|
||||||
cb.setOAuthAccessTokenSecret(shared_prefs.getString(TWITTER_AUTH_SECRET, ""));
|
|
||||||
TwitterFactory tf = new TwitterFactory(cb.build());
|
|
||||||
Twitter twitter = tf.getInstance();
|
|
||||||
return twitter.updateStatus(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new TwitterServices. <p>
|
|
||||||
* Initialization of this object is only needed for authorization, posting can be done statically once the users tokens are stored.
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public TwitterServices(Context context) {
|
|
||||||
shared_prefs = context.getSharedPreferences(TravelPost.SETTINGS, 0);
|
|
||||||
twitter = new TwitterFactory().getInstance();
|
|
||||||
twitter.setOAuthConsumer(TRAVEL_PORT_OAUTH_KEY, TRAVEL_PORT_OAUTH_SECRET);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Authorization URL
|
|
||||||
* @throws TwitterException
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public String getAuthorizationURL() throws TwitterException{
|
|
||||||
requestToken = twitter.getOAuthRequestToken();
|
|
||||||
return requestToken.getAuthorizationURL();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves the authorization tokens for future use
|
|
||||||
* @param authorizationCode
|
|
||||||
* @return true if save was successful
|
|
||||||
* @throws TwitterException
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public boolean saveAuthorizationTokens(String authorizationCode) throws TwitterException{
|
|
||||||
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, authorizationCode);
|
|
||||||
Log.v(TravelPost.TAG,"saving twitter tokens");
|
|
||||||
Editor e = shared_prefs.edit();
|
|
||||||
e.putString(TWITTER_AUTH_TOKEN, accessToken.getToken()).commit();
|
|
||||||
e.putString(TWITTER_AUTH_SECRET, accessToken.getTokenSecret()).commit();
|
|
||||||
return e.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/**
|
|
||||||
* WebAuth.java
|
|
||||||
* @date Jan 24, 2011
|
|
||||||
* @author ricky barrette
|
|
||||||
* @author Twenty Codes, LLC
|
|
||||||
*/
|
|
||||||
package com.TwentyCodes.android.TravelPost;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.View.OnClickListener;
|
|
||||||
import android.webkit.WebView;
|
|
||||||
import android.widget.EditText;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* a simple activity that will be started to display the social client auth code for a result (user entered auth code).
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
public class WebAuth extends Activity implements OnClickListener {
|
|
||||||
|
|
||||||
public static final String AUTH_URL = "auth_url";
|
|
||||||
public static final String AUTH_CODE = "auth_code";
|
|
||||||
private EditText mAuthCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the activity is first created
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.app.Activity#onCreate(android.os.Bundle)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState){
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
this.setContentView(R.layout.webauth);
|
|
||||||
WebView webView = (WebView) findViewById(R.id.authWebView);
|
|
||||||
webView.loadUrl(this.getIntent().getStringExtra(AUTH_URL));
|
|
||||||
webView.requestFocus(View.FOCUS_DOWN);
|
|
||||||
|
|
||||||
findViewById(R.id.authOkButton).setOnClickListener(this);
|
|
||||||
mAuthCode = (EditText) findViewById(R.id.authCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* called when the ok button is clicked
|
|
||||||
* (non-Javadoc)
|
|
||||||
* @see android.view.View.OnClickListener#onClick(android.view.View)
|
|
||||||
* @author ricky barrette
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
setResult(RESULT_OK, new Intent().putExtra(AUTH_CODE, mAuthCode.getText().toString()));
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user