Skip to content
This repository has been archived by the owner on Jan 25, 2018. It is now read-only.

Commit

Permalink
fixes for NPE in notify and OTR state; related to issue #118
Browse files Browse the repository at this point in the history
- added new WarningDialogActivity for displaying general warning popup
messages from within a service. this is now used to display any errors
relating to OTR state being out of sync with remote contact

- any warning or error messages are now injecting back into the convo
stream so remote participant will be notified if there is a problem

- on receiving FINISHED state change, now call endSession of the OTR
manager so that we are assured state is actually ended
  • Loading branch information
n8fr8 committed Mar 16, 2012
1 parent b83e16a commit db3d74c
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 34 deletions.
6 changes: 6 additions & 0 deletions AndroidManifest.xml
Expand Up @@ -320,6 +320,12 @@ android:anyDensity="true"
android:theme="@android:style/Theme.Dialog"
android:taskAffinity=""
/>

<activity android:name=".app.WarningDialogActivity"
android:configChanges="locale"
android:theme="@android:style/Theme.Dialog"
android:taskAffinity=""
/>

</application>
</manifest>
21 changes: 15 additions & 6 deletions src/info/guardianproject/otr/OtrChatManager.java
Expand Up @@ -47,14 +47,13 @@ public class OtrChatManager implements OtrEngineListener, OtrSmEngineHost {

private OtrChatManager (int otrPolicy,Context context) throws Exception
{
mOtrEngineHost = new OtrEngineHostImpl(new OtrPolicyImpl(otrPolicy), context);
mOtrEngineHost = new OtrEngineHostImpl(new OtrPolicyImpl(otrPolicy), context.getApplicationContext());

mOtrEngine = new OtrEngineImpl(mOtrEngineHost);
mOtrEngine.addOtrEngineListener(this);

mSessions = new Hashtable<String,SessionID>();
mOtrSms = new Hashtable<SessionID,OtrSm>();
mContext = context;

This comment has been minimized.

Copy link
@n8fr8

n8fr8 Mar 19, 2012

Author Member

uh yeah, why was this deleted? i am in idiot sometimes.

}


Expand Down Expand Up @@ -167,6 +166,8 @@ public void endSession(String localUserId, String remoteUserId){
SessionID sessionId = getSessionId(localUserId,remoteUserId);

mOtrEngine.endSession(sessionId);


} catch (OtrException e) {
OtrDebugLogger.log( "endSession", e);
}
Expand Down Expand Up @@ -199,9 +200,8 @@ public String decryptMessage(String localUserId, String remoteUserId, String msg
}
}

//if (plain != null && plain.length() == 0)
//return null;
return plain;
if (plain != null && plain.length() == 0)
return null;

} catch (OtrException e) {
OtrDebugLogger.log("error decrypting message",e);
Expand Down Expand Up @@ -272,11 +272,20 @@ public void sessionStatusChanged(SessionID sessionID) {
else if (sStatus == SessionStatus.PLAINTEXT)
{

try {
mOtrEngine.endSession(sessionID);
} catch (OtrException e) {
OtrDebugLogger.log("error ending session", e);
}

}
else if (sStatus == SessionStatus.FINISHED)
{

try {
mOtrEngine.endSession(sessionID);
} catch (OtrException e) {
OtrDebugLogger.log("error ending session", e);
}
mOtrSms.remove(sessionID);

}
Expand Down
45 changes: 19 additions & 26 deletions src/info/guardianproject/otr/OtrEngineHostImpl.java
@@ -1,6 +1,8 @@
package info.guardianproject.otr;

import info.guardianproject.otr.app.im.R;
import info.guardianproject.otr.app.im.app.CertDisplayActivity;
import info.guardianproject.otr.app.im.app.WarningDialogActivity;
import info.guardianproject.otr.app.im.engine.ChatSessionManager;
import info.guardianproject.otr.app.im.engine.Message;
import info.guardianproject.otr.app.im.service.ChatSessionAdapter;
Expand All @@ -21,6 +23,7 @@
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

Expand Down Expand Up @@ -153,46 +156,36 @@ public void injectMessage(SessionID sessionID, String text) {

@Override
public void showError(SessionID sessionID, String error) {
OtrDebugLogger.log( sessionID.toString() + ": ERROR=" + error);

showToolbarNotification(error, DEFAULT_NOTIFY_ID, R.drawable.ic_menu_key, -1);
injectMessage(sessionID,error);

OtrDebugLogger.log( sessionID.toString() + ": ERROR=" + error);

showDialog ("Encryption Error", error);
}

@Override
public void showWarning(SessionID sessionID, String warning) {

injectMessage(sessionID,warning);

OtrDebugLogger.log( sessionID.toString() + ": WARNING=" + warning);

showToolbarNotification(warning, DEFAULT_NOTIFY_ID, R.drawable.ic_menu_key, -1);
showDialog ("Encryption Warning", warning);

}

private int DEFAULT_NOTIFY_ID = 11;

private void showToolbarNotification (String notifyMsg, int notifyId, int icon, int flags)
private void showDialog (String title, String msg)
{


NotificationManager mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);


CharSequence tickerText = notifyMsg;
long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);
//notification.flags |= flags;
Intent nIntent = new Intent(mContext, WarningDialogActivity.class);
nIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

CharSequence contentTitle = mContext.getString(R.string.app_name);
CharSequence contentText = notifyMsg;
nIntent.putExtra("title", title);
nIntent.putExtra("msg", msg);

mContext.startActivity(nIntent);

//Intent notificationIntent = new Intent(context, WelcomeActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, null, 0);

notification.setLatestEventInfo(mContext, contentTitle, contentText, contentIntent);

mNotificationManager.notify(notifyId, notification);


}

}
Expand Up @@ -13,15 +13,14 @@ public class CertDisplayActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

String msg = getIntent().getStringExtra("msg");
String issuer = getIntent().getStringExtra("issuer");
String fingerprint = getIntent().getStringExtra("fingerprint");
String subject = getIntent().getStringExtra("subject");
String issuedOn = getIntent().getStringExtra("issued");
String expiresOn = getIntent().getStringExtra("expires");


showDialog (msg + "\nIssued by: " + issuer + "\nIssued to: " + subject + "\nSHA1 Fingerprint: " + fingerprint
showDialog ("Issued by: " + issuer + "\nIssued to: " + subject + "\nSHA1 Fingerprint: " + fingerprint
+ "\nIssued on: " + issuedOn + "\nExpires on" + expiresOn
);
}
Expand Down
49 changes: 49 additions & 0 deletions src/info/guardianproject/otr/app/im/app/WarningDialogActivity.java
@@ -0,0 +1,49 @@
package info.guardianproject.otr.app.im.app;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.os.Bundle;

public class WarningDialogActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

String title = getIntent().getStringExtra("title");

String msg = getIntent().getStringExtra("msg");

showDialog (title, msg);
}



private void showDialog (String title, String msg)
{

AlertDialog ad = new AlertDialog.Builder(this)
.setTitle(title).setIcon(android.R.drawable.ic_dialog_alert)
.setMessage(msg).show();

ad.setOnDismissListener(new OnDismissListener () {

@Override
public void onDismiss(DialogInterface arg0) {

WarningDialogActivity.this.finish();

}

});


}




}

0 comments on commit db3d74c

Please sign in to comment.